Swift 3替换出现正则表达式

时间:2017-04-23 20:31:59

标签: regex swift

我的replacementOccurrences函数遇到了问题。我有一个像这样的字符串:

let x = "&john &johnny &johnney"

我需要做的只是删除“& john”

所以我有这段代码:

y = "&john"
x = x.replacingOccurrences(of: y, with: " ", options: NSString.CompareOptions.regularExpression, range: nil)

我得到的问题是,这将删除所有john的实例......而且我留下了:

"ny ney"

此外,我考虑设置范围,然而,这不会真正解决我的问题,因为名称可能是不同的顺序。

3 个答案:

答案 0 :(得分:6)

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

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

var x = "&john &johnny &johnney"

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

答案 1 :(得分:1)

为字符串添加空格,使其变为" &john "。现在它不会删除不必要的字符。

但是,如果&john是名称列表中的第一个或最后一个,则无效。要解决此问题,您只需通过调用&johnhasSuffix来检查字符串是否具有hasPrefix的后缀或前缀。

实际上,我只想到了一个更好的解决方案:

x = x.components(separatedBy: " ").
    filter { $0 != "&john" }.joined(separator: " ")

答案 2 :(得分:-2)

您可能希望在要删除的字符串末尾包含空格:

y = "&john "