【问题标题】:Regular expression with backslash in swiftswift中带有反斜杠的正则表达式
【发布时间】:2021-05-25 17:18:11
【问题描述】:

我在 swift 5 和 Xcode 12 的 textview 中使用 replaceOccurrences 替换某些特定关键字后的单词时遇到问题。

例如: 我的文本视图将具有以下字符串“NAME\JOHN PHONE\555444333”

“NAME”和“PHONE”将是唯一的,因此每当我更改正确的字段时,我都想更改此文本视图中的名称或电话。

例如,让我们用代码将 JOHN 更改为 CLOE

txtOther.text = txtOther.text.replacingOccurrences(of: "NAME(.*?)\\s", with: "NAME\\\(new_value) ", options: .regularExpression)
print (string)

输出:“NAMECLOE”而不是“NAME\CLOE”

我无法根据正则表达式获取反斜杠来打印。

或者也许改变正则表达式只是为了在“NAME”之后将 JOHN 更改为 CLOE

谢谢!!!

爱丽儿

【问题讨论】:

  • with: "NAME\\\\\(newValue)" ?

标签: swift regex uitextview


【解决方案1】:

您可以通过使用 raw 字符串作为正则表达式来解决这个问题,即用#包围的字符串

let pattern = #"(NAME\\)(.*)\s"# 

请注意,名称和 \ 位于单独的组中,替换时可以引用

let output = string.replacingOccurrences(of: pattern, with: "$1\(new_value) ", options: .regularExpression)

【讨论】:

    【解决方案2】:

    使用

    "NAME\\JOHN PHONE\\555444333".replacingOccurrences(
        of: #"NAME\\(\S+)"#, 
        with: "NAME\\\\\(new_value)",
        options: .regularExpression
    )
    

    替换中的双反斜杠,反斜杠是替换中的特殊元字符。

    \S+匹配一个或多个不同于空格的字符,这比.*?\s更短更高效,而且你不必担心如何放回空格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-01
      • 2015-01-24
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多