【问题标题】:Replace string with regex in swift在swift中用正则表达式替换字符串
【发布时间】:2015-09-16 10:35:57
【问题描述】:

我想替换与正则表达式模式匹配的字符串的一部分。

我有以下正则表达式模式:

(.+?)@test\.(.+?)

这是一个字符串替换模式:

$1@hoge\.$2

如何在 Swift 代码中使用它们?

【问题讨论】:

    标签: regex swift


    【解决方案1】:

    在 Swift 中,您可以使用 stringByReplacingMatchesInString 进行基于正则表达式的替换。

    这是一个显示如何使用它的 sn-p:

    let txt = "myname@test.com"
    let regex = NSRegularExpression(pattern: "([^@\\s]+)@test\\.(\\w+)", options:nil, error: nil)
    let newString = regex!.stringByReplacingMatchesInString(txt, options: nil, range: NSMakeRange(0, count(txt)), withTemplate: "$1@hoge.$2")
    println(newString)
    

    Swift 4.2 更新

    let txt = "myname@test.com"
    let regex = "([^@\\s]+)@test\\.(\\w+)"
    let repl = "$1@hoge.$2"
    print( txt.replacingOccurrences(of: regex, with: repl, options: [.regularExpression]) )
    

    请注意,我将正则表达式更改为

    • ([^@\\s]+) - 匹配除 @ 或空格之外的 1 个或多个字符
    • @ - 匹配 @ 字面意思
    • test\\.(\\w+) - 匹配 test. 字面,然后匹配 1 个或多个字母数字字符 (\w+)。

    请注意,在替换字符串中,您不需要转义句点。

    【讨论】:

    • 我写了一个正则表达式替换方法,它需要一个闭包:eon.codes/blog/2017/08/03/regex-replace-with-closure
    • @GitSync 我认为当前的问题不需要通过启用闭包的正则表达式来解决。不过,这当然可以对其他人有所帮助。
    • @WiktorStribiżew 完全同意在这个问题上关闭是多余的。但是我在堆栈或谷歌上找不到任何关于用闭包替换的东西,所以我想我会提到它。
    • @GitSync 我想我在某处看到过。也许类似的东西。如果我找到它,我会发表评论。
    • @WiktorStribiżew 我的实现并不完美。我认为累积附加字符串比就地子字符串替换更快。但我不得不继续前进。我在代码中记下了它,以备将来改进。
    猜你喜欢
    • 1970-01-01
    • 2018-07-13
    • 2015-11-30
    • 2021-11-29
    • 2017-02-04
    相关资源
    最近更新 更多