Swift NSRegularExpressions-非捕获组不工作

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,

您好,在NSRegularExpressions中使用regex的非捕获组功能时遇到问题

下面是一些捕获匹配项的代码:

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-谢谢你的解决方案和其他解决问题的方法。我很感激!