Swift 拆分所有字符上的字符串,但使用正则表达式的字符除外

Swift 拆分所有字符上的字符串,但使用正则表达式的字符除外,swift,regex,Swift,Regex,我必须把一根带有歌词的长线分成几行,然后,每行分成几句话。我将把这些信息保存在一个二维数组中 我看到了一些类似的问题,并已使用[NSRegularExpression]() 但我似乎找不到任何等于“除某物以外的一切”的正则表达式,这正是我在将字符串拆分为单词时想要拆分的内容 更具体地说,我想对除字母数字或'or-之外的所有内容进行拆分。在Java中,这个正则表达式是[^\\w'-]+ 下面是字符串,后面是我尝试实现此任务的Swift代码(我只是在空格上拆分,而不是在带有“[^\w'-]+”的单词

我必须把一根带有歌词的长线分成几行,然后,每行分成几句话。我将把这些信息保存在一个二维数组中

我看到了一些类似的问题,并已使用[NSRegularExpression]() 但我似乎找不到任何等于“除某物以外的一切”的正则表达式,这正是我在将字符串拆分为单词时想要拆分的内容

更具体地说,我想对除字母数字或'or-之外的所有内容进行拆分。在Java中,这个正则表达式是
[^\\w'-]+

下面是字符串,后面是我尝试实现此任务的Swift代码(我只是在空格上拆分,而不是在带有“[^\w'-]+”的单词上拆分,因为我不知道如何执行此操作

 1 Is this the real life?
 2 Is this just fantasy?
 3 Caught in a landslide,
 4 No escape from reality.
 5 
 6 Open your eyes,
 7 Look up to the skies and see,
 8 I'm just a poor boy, I need no sympathy,
 9 Because I'm easy come, easy go,
10 Little high, little low,
11 Any way the wind blows doesn't really matter to me, to me.
12 
13 Mama, just killed a man,
(等等)


let line=s?组件(以“\n”分隔)
var all_words=[[String]]()

对于0中的i..我建议使用反向模式,
[\w'-]+
,以匹配您需要的字符串并使用

您的代码如下所示:

for i in 0..<lines!.count {
    let new_words = matches(for: "[\\w'-]+", in: lines![i]) 
    all_words.append(new_words)
 }

产生
[“11”、“任意”、“方式”、“风”、“吹”、“不”、“真的”、“重要”、“到”、“我”、“到”、“我”]
一个简单的解决方案是先用特殊字符替换序列,然后在该字符上拆分:

let words = string
    .replacingOccurrences(of: "[^\\w'-]+", with: "|", options: .regularExpression)
    .split(separator: "|")
print(words)

但是,如果可以,请使用系统函数枚举单词。

可能重复的可以使用范围内的EnumerateSubstring将字符串拆分为行,然后再次拆分为单词。使用上面链接的扩展名,可以执行类似以下操作:
let byLinesByWords=s.byLines.map{$0.byWords}
如果需要删除每行开头的数字
让byLinesByWords=s.byLines.map{$0.byWords.dropFirst()}
只需使用反向正则表达式匹配所有匹配项,
[\w'-]+
print(matches(for: "[\\w'-]+", in: "11 Any way the wind blows doesn't really matter to me, to me."))
let words = string
    .replacingOccurrences(of: "[^\\w'-]+", with: "|", options: .regularExpression)
    .split(separator: "|")
print(words)