搜索并替换为“仅匹配字词”选项

时间:2016-03-31 21:09:29

标签: ios regex swift

我需要从句子中替换所有determiners。我的问题是,当我替换“a”时,它会用字替换这个字母。

str.stringByReplacingOccurrencesOfString("a", withString: "")

例如: a match a

结果将是: mtch

但我想:match

2 个答案:

答案 0 :(得分:1)

你应该尝试像/\ba\b/这样的单词边界。应使用g全局搜索和不区分大小写的i标记。

单词边界\b可确保a后面或前面没有字符。

<强> Regex101 Demo

答案 1 :(得分:1)

您可以使用\b字边界检测整个单词,并且您可以使用\s*(1 +空格)在这些单词后面获取可选空格。然后,我们可以确保.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())没有前导空格。

另请注意,Swift中的字符串是C字符串(支持转义序列),并且由于正则表达式特殊元字符需要使用文字反斜杠进行转义,因此您需要实际加倍模式中的反斜杠(即\s - &gt; "\\s")。

这是Swift 2.1示例代码:

var s = "a match a"
var out_s = ""
if let regex = try? NSRegularExpression(pattern: "\\ba\\b\\s*", options: .CaseInsensitive) {
    out_s = regex.stringByReplacingMatchesInString(s, options: .WithTransparentBounds, range: NSMakeRange(0, s.characters.count), withTemplate: "")
    print("\""+out_s.stringByTrimmingCharactersInSet(
        NSCharacterSet.whitespaceAndNewlineCharacterSet()
    )+"\"")
}

打印"match"

另请注意,options: .CaseInsensitive将执行不区分大小写的匹配,请使用options: []使搜索区分大小写。

现在,如果你有一个确定者列表,请使用交替

"\\b(?:an?|the)\\b\\s*"

此表达式将匹配aanthe,后跟0 +空格。