regex - 在swift中使用正则表达式从句子内部提取单词

标签 regex swift nsregularexpression

我想要一个正则表达式从字符串中提取 StarboyThe Weekend/Daft Punk:

The Weeknd / Daft Punk - text=\"Starboy\" song_spot=\"M\" MediaBaseId=\"2238986\" itunesTrackId=\"0\" amgTrackId=\"-1\" amgArtistId=\"0\" TAID=\"744880\" TPID=\"43758958\" cartcutId=\"08

到目前为止这是我的尝试

do {  
    let input = "The Weeknd / Daft Punk - text=\"Starboy\" song_spot=\"M\" MediaBaseId=\"2238986\" itunesTrackId=\"0\" amgTrackId=\"-1\" amgArtistId=\"0\" TAID=\"744880\" TPID=\"43758958\" cartcutId=\"0893584001\""  
    let regex = try NSRegularExpression(pattern: "text=\"(.*)", options: NSRegularExpression.Options.caseInsensitive)  
    let matches = regex.matches(in: input, options: [], range: NSRange(location: 0, length: input.utf16.count))  

    if let match = matches.first {  
        let range = match.range(at:1)  
        if let swiftRange = Range(range, in: input) {  
            let name = input[swiftRange]  
            print(name)  
        }  
    }  
} catch {  
    print("Regex was bad!")  
}  

但这给了我整个字符串

Starboy" song_spot="M" MediaBaseId="2238986" itunesTrackId="0" amgTrackId="-1" amgArtistId="0" TAID="744880" TPID="43758958" cartcutId="0893584001"

最佳答案

如果您需要捕获序列 - text= 之前的所有文本后跟引号之间的任何单词,您可以使用此正则表达式 ".*(?=(text=\"[\\w\\s]+\"))"并捕获序列 text=" 之后的任何单词你可以使用这个正则表达式 "(?<=text=\")([\\w\\s]+)" .如果您想捕获两个范围,只需使用“|”它们之间如下:

let string = """
The Weeknd / Daft Punk - text=\"Starboy\" song_spot=\"M\" MediaBaseId=\"2238986\" itunesTrackId=\"0\" amgTrackId=\"-1\" amgArtistId=\"0\" TAID=\"744880\" TPID=\"43758958\" cartcutId=\"08
"""
let pattern = ".*(?=( - text=\"[\\w\\s]+\"))|(?<=text=\")([\\w\\s]+)"

do {
    let regex = try NSRegularExpression(pattern: pattern, options: .caseInsensitive)
    let matches = regex.matches(in: string, options: [], range: NSRange(location: 0, length: string.utf16.count))
    for match in matches {
        if let range = Range(match.range, in: string) {
            let name = string[range]
            print(name)
        }
    }
} catch {
    print("Regex was bad!")
}

这将打印

The Weeknd / Daft Punk
Starboy

关于regex - 在swift中使用正则表达式从句子内部提取单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46869167/

相关文章:

java - 如何在黑莓 ({m,n}) 上使用量词正则表达式模式

javascript - 在表单输入中指定逗号后的最大长度

ios - 在 Swift 中的整数后显示 .0

ios - NSRegularExpression 在匹配字符串中搜索相同模式

javascript - 在solidity文件中查找结构

ios - swift 3 : most performant way to check many strings with many regular expressions

java - 下拉列表的正则表达式

java - 正则表达式匹配单词的一部分

ios - 碰撞检测不能完全工作

swift - 来自 https 请求的奇怪 MLFeatureValue 响应