我需要替换句子中的所有限定词。我的问题是,当我替换"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+空格的a
、an
或the
。
您应该尝试使用像/bab/
这样的单词边界。应使用g
全局搜索和不区分大小写的i
标志。
字边界b
确保a
后面或前面没有字符。
Regex101演示