匹配字符串中除特定模式以外的所有子字符串

时间:2019-06-06 09:27:37

标签: swift regex

在此字符串中:“测试(您好)123(您好)”

我要匹配:

TESTING
123

请帮助..谢谢!

我只能使用(\\\(.*?\))来匹配\(hello)\(HOW ARE YOU),如何匹配此字符串的对应字符串?

1 个答案:

答案 0 :(得分:1)

ICU(Swift中使用的正则表达式库)正则表达式无法匹配不等于某些多字符字符串的文本块。如果您想匹配某个特定字符以外的任何1个或多个字符,则可以这样做。如果您要“否定”整个字符的序列,则无法执行此操作。

您可以使用

let str = "TESTING \\(hello) 123 \\(HOW ARE YOU)"
let pattern = "\\s*\\\\\\([^()]*\\)\\s*"
let result = str.replacingOccurrences(of: pattern, with: "\0", options: .regularExpression)
print(result.components(separatedBy: "\0").filter({ $0 != ""}))

输出:["TESTING", "123"]

想法是匹配不需要的内容,并用空字符替换它们,然后用该空字符分割字符串。

模式详细信息

  • \s*-超过0个空格
  • \\\(-一个\(子字符串
  • [^()]*-除()之外的0+个字符
  • \)-一个)字符
  • \s*-超过0个空格。

结果可能包含空字符串,因此使用.filter({ $0 != ""})来过滤掉它们。