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



我需要替换句子中的所有限定词。我的问题是,当我替换"a"时,它会替换单词中的这个字母。

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

例如:a match a

结果是:mtch

但我想要:match

您可以检测具有b单词边界的整个单词,还可以在具有s*(1+空格)的这些单词后面抓取可选的空格。然后,我们可以确保.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())没有留下前导空格。

另外请注意,Swift中的字符串是C字符串(支持转义序列),由于regex特殊元字符需要用字面反斜杠进行转义,因此实际上需要将模式中的反斜杠加倍(即s->"\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*"

此表达式将匹配后面跟有0+空格的aanthe

您应该尝试使用像/bab/这样的单词边界。应使用g全局搜索和不区分大小写的i标志。

字边界b确保a后面或前面没有字符。

Regex101演示

最新更新