我需要从句子中替换所有determiners。我的问题是,当我替换“a”时,它会用字替换这个字母。
str.stringByReplacingOccurrencesOfString("a", withString: "")
例如:
a match a
结果将是:
mtch
但我想:match
答案 0 :(得分:1)
答案 1 :(得分:1)
您可以使用\b
字边界检测整个单词,并且您可以使用\s*
(1 +空格)在这些单词后面获取可选空格。然后,我们可以确保.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
没有前导空格。
另请注意,Swift中的字符串是C字符串(支持转义序列),并且由于正则表达式特殊元字符需要使用文字反斜杠进行转义,因此您需要实际加倍模式中的反斜杠(即\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*"
此表达式将匹配a
,an
或the
,后跟0 +空格。