我有一个字符串扩展:
func replaceLastWordWithUsername(_ username: String) -> String {
let pattern = "@*[A-Za-z0-9]*$"
do {
Log.info("Replacing", self, username)
let regex = try NSRegularExpression(pattern: pattern, options: NSRegularExpression.Options.caseInsensitive)
let range = NSMakeRange(0, self.characters.count)
return regex.stringByReplacingMatches(in: self, options: [], range: range, withTemplate: username )
} catch {
return self
}
}
let oldString = "Hey jess"
let newString = oldString.replaceLastWordWithUsername("@jessica")
newString 现在等于Hey @jessica @jessica
。预期结果应该是 Hey @jessica
最佳答案
我认为这是因为*
regex operator将会
Match 0 or more times. Match as many times as possible.
这可能会导致它除了末尾的单词之外还匹配“末尾无字符”,从而导致两次替换。
正如@Code Different提到的,如果您使用let pattern = "\\w+$"
,它只会在有字符的情况下匹配,从而消除“无字符”匹配。
"Word1 Word2"
^some characters and then end
^0 characters and then end
关于regex - 如何使用正则表达式替换最后一个单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44688438/