在Swift中使用正则表达式

3
我正在尝试在Swift中替换字符串中所有空格和特殊字符的出现次数。
我不知道Swift中的正则表达式是什么。
我试图使用内置函数.replacingOccurences(of:)并将我的RegEx作为字符串协议传递,然而代码编译时没有任何变化。
在线上有很多关于如何在Swift中替换出现次数的资源,但解决方案比必要的复杂得多。
该如何正确返回此输出(当前策略):
let word = "Hello World!!"
func regEx(word: String) -> String {
   return word.replacingOccurrences(of: "/[^\\w]/g", with: "")
}
// return --> "HelloWorld"

使用 "\\W+".... - Wiktor Stribiżew
有没有类似于 https://regexr.com/ 的网站可以用于 Swift? - Chris
Swift使用ICU正则表达式库,我不知道有哪个在线正则表达式测试工具支持它,但PCRE虽然存在一些差异,但很接近。 - Wiktor Stribiżew
2个回答

5
您可以使用
return word.replacingOccurrences(of: "\\W+", with: "", options: .regularExpression)

请注意options: .regularExpression参数实际上启用了.replacingOccurrences方法中基于正则表达式的搜索。
您的模式是[^\w]。它是一个否定字符类,匹配除单词字符外的任何字符。因此,它等同于\W/.../是正则表达式的分隔符。在Swift正则表达式中,它们被解析为字面正斜杠,因此您的模式无法工作。 g是一个“全局”修饰符,可以让正则表达式引擎匹配多个出现次数,但仅适用于支持它的地方(例如JavaScript)。由于Swift正则表达式不支持正则表达式分隔符,因此正则表达式引擎通过.replacingOccurrences方法定义知道如何行事:

返回一个新字符串,在其中将接收器中的所有目标字符串替换为另一个给定字符串。

如果您需要检查ICU正则表达式语法,请考虑参考ICU用户指南 > 正则表达式,这是Swift/Objective-C中使用的正则表达式库。

你需要将选项设置为.regularExpression - Leo Dabus
是的,我现在正在测试它,准备更新。 - Wiktor Stribiżew

0
此外,您可以扩展字符串并完成相同的位。但如果这是作业,并且他们说要使用函数,请坚持使用函数。
var word = "Hello World!!!"

extension String {
    func regEx() -> String {
        return self.replacingOccurrences(of: "\\W+", with: "", options: .regularExpression, range: nil)
    }
}

word.regEx()

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