swift 中带反斜杠的正则表达式

Regular expression with backslash in swift

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

例如: 我的文本视图将包含以下字符串“NAME\JOHN PHONE5444333”

“NAME”和“PHONE”将是唯一的,所以每当我更改适当的字段时,我想更改此文本视图中的名称或 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

谢谢!!!

爱丽儿

您可以通过对正则表达式使用 raw 字符串来解决这个问题,这是一个用 #

包围的字符串
let pattern = #"(NAME\)(.*)\s"# 

注意name和\在一个单独的组里,替换的时候可以参考

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

使用

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

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

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