You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取URL文件名中第一个下划线前的ID字符串?

Swift提取URL文件名中第一个下划线前的ID字符串

你已经成功获取到去掉扩展名的文件名fileId,可以通过以下几种方式提取第一个下划线_之前的目标ID:

方法一:字符串分割法(直观易读)

通过下划线分割字符串后取第一个元素,适合大多数常规场景:

var str = "https://urlexample.com/EXAMPLE_STRING/video/multimedia/20219/27/2022492719125378_1664299242_video_1296.mp4"

// 获取去掉扩展名的文件名
let fileId = str.deletingPathExtension.lastPathComponent
// 分割并提取第一个部分
if let targetId = fileId.components(separatedBy: "_").first {
    print(targetId) // 输出:2022492719125378
}

如果文件名中没有下划线,first会返回原字符串,可根据需求补充异常处理逻辑。

方法二:位置定位截取法(性能更优)

通过定位第一个下划线的位置,直接截取前缀子字符串,适合处理长文本:

var str = "https://urlexample.com/EXAMPLE_STRING/video/multimedia/20219/27/2022492719125378_1664299242_video_1296.mp4"

let fileId = str.deletingPathExtension.lastPathComponent
if let underscoreRange = fileId.range(of: "_") {
    let targetId = fileId[..<underscoreRange.lowerBound]
    print(String(targetId)) // 输出:2022492719125378
} else {
    // 无下划线时的处理逻辑,比如返回原字符串或提示错误
    print("文件名中未找到下划线")
}

方法三:正则匹配法(精准校验场景)

如果需要确保ID为纯数字类型,可通过正则表达式精准匹配开头的数字序列:

import Foundation

var str = "https://urlexample.com/EXAMPLE_STRING/video/multimedia/20219/27/2022492719125378_1664299242_video_1296.mp4"

let fileId = str.deletingPathExtension.lastPathComponent
let pattern = "^\\d+" // 匹配开头连续数字
if let regex = try? NSRegularExpression(pattern: pattern),
   let match = regex.firstMatch(in: fileId, range: NSRange(fileId.startIndex..., in: fileId)) {
    let targetId = String(fileId[Range(match.range, in: fileId)!])
    print(targetId) // 输出:2022492719125378
}

内容的提问来源于stack exchange,提问作者ToraLytc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 16:45:35