Swift 3 替换字符串中的正则表达式匹配项

5
我有一个问题,涉及到我的replacingOccurrences函数。我有一个字符串如下:
let x = "&john &johnny &johnney"

我需要做的是仅删除“&john”。
所以我有这段代码:
y = "&john"
x = x.replacingOccurrences(of: y, with: " ", options: NSString.CompareOptions.regularExpression, range: nil)

我遇到的问题是这将删除所有john的实例... 然后我只剩下了:
"ny ney"

我考虑过设置范围,但这并不能真正解决我的问题,因为名称可能会以不同的顺序出现。


"&john, &john! '&john'" 应该发生什么? - Martin R
3个回答

9

首先你的代码无法编译,因为x必须是var

使用正则表达式仅删除&John,需要检查查询结尾是否是单词边界:

var x = "&john &johnny &johnney"

let pattern = "&john\\b"
x = x.replacingOccurrences(of: pattern, with: " ", options: .regularExpression)

1
将字符串添加空格,使其变为"&john"。现在它不会删除不必要的字符。
但是,如果&john是名称列表中的第一个或最后一个,这将无法起作用。为解决此问题,您只需调用hasSuffixhasPrefix来检查字符串是否具有&john的后缀或前缀即可。
实际上,我刚想到了更好的解决方案:
x = x.components(separatedBy: " ").
    filter { $0 != "&john" }.joined(separator: " ")

-2
你可能想在要删除的字符串末尾包含一个空格:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接