Swift NSRegularExpressions-非捕获组不工作
您好,在NSRegularExpressions中使用regex的非捕获组功能时遇到问题 下面是一些捕获匹配项的代码:Swift NSRegularExpressions-非捕获组不工作,swift,regex,Swift,Regex,您好,在NSRegularExpressions中使用regex的非捕获组功能时遇到问题 下面是一些捕获匹配项的代码: func matches(for regex: String, in text: String) -> [String] { do { let regex = try NSRegularExpression(pattern: regex); let results = regex.matches(in: text,
func matches(for regex: String, in text: String) -> [String] {
do {
let regex = try NSRegularExpression(pattern: regex);
let results = regex.matches(in: text,
range: NSRange(text.startIndex..., in: text));
return results.map {
String(text[Range($0.range, in: text)!]);
};
} catch let error {
print("invalid regex: \(error.localizedDescription)")
return [];
};
};
现在转到正则表达式,我有一个字符串,它的形式是workcenter:WDO-POLD
,这应该很容易实现,但是正则表达式字符串((?:workcenter:)(.{0,20}))
没有返回我需要的内容
运行时没有错误,但返回的字符串与输入的字符串相同-我正在尝试检索
workcenter:
后面的值,即(.{0,20})
第一个问题是正则表达式。您不需要外部捕获组。将正则表达式更改为:
(?:workcenter:)(.{0,20}) <-- outer capture group removed
(?<=workcenter:)(.{0,20})
这将检查正则表达式中有多少捕获组。如果没有,则返回完全匹配。但如果有1个或多个,则只返回第一个捕获组的值
如果将正则表达式更改为:
(?:workcenter:)(.{0,20}) <-- outer capture group removed
(?<=workcenter:)(.{0,20})
这使得
WDO-POLD
您需要参考捕获组#2。我对swift不太熟悉,但结果图中的$2
将是我的赌注…@collapsar-不幸的是,这将改变我拥有的所有其他字符串,我可以使用不同的结果图实现另一种不同的匹配,并在其中加入您的解决方案,然后试一试请尝试”(?@OOPer-成功了!谢谢你+1-谢谢你的解决方案和其他解决问题的方法。我很感激!