regex - 如何使用正则表达式替换最后一个单词?

标签 regex swift

我有一个字符串扩展:

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/

相关文章:

regex - 为 NLP locutions 编码文本的高效 SQL 语句

regex - Snowflake REGEX 获取字符串中最后 7 位数字

ios - UITableView 滚动快速更改单元格背景颜色

arrays - 按长度和位置快速使用 NSRange 对数组进行排序

arrays - 在 Swift 中使用 .filter 和字典数组

java - 从文本文件中仅提取带撇号的单词

正则表达式 - 匹配 3 位数字

regex - Swift 从字符串中提取字符串

swift - NSDictionary > 使用 SwiftyJSON 的 JSON 字符串

swift - 返回初始 View Controller 时选项卡栏消失