【发布时间】:2018-01-03 18:24:56
【问题描述】:
我正在使用正则表达式搜索特定模式的文本,它似乎工作正常,直到我想包含一个“:”
我用来查找文本的函数是:
func matches(for regex: String, in text: String) -> [String] {
do {
let regex = try NSRegularExpression(pattern: regex)
let results = regex.matches(in: text,
range: NSRange(text.startIndex..., in: text))
return results.map {
String(text[Range($0.range, in: text)!])
}
} catch let error {
print("invalid regex: \(error.localizedDescription)")
return []
}
}
我用来测试模式的示例数组是:
var textstringarray = ["10:50 - 13:40","ABC"]
这是检查不同项目的循环:
for myString in textstringarray{
let matched2 = matches(for: "[0-9][0-9][:][0-9][0-9] [-] [0-9][0-9][:][0-9][0-9]", in: myString)
if !matched2.isEmpty{
print(matched2)
}
}
我希望它只返回第一项,但登录 Playground 只显示
无效的正则表达式:值“[0-9][0-9][:][0-9][0-9] [-] [0-9][0-9][:][0 -9][0-9]” 无效
到目前为止,我发现第二个 [:] 的问题是,因为当我删除它时,一切正常。任何人有任何想法,我能做什么? 非常感谢
【问题讨论】:
-
\d{2}:\d{2} - \d{2}:\d{2}?无需将:放入集合中。-也是如此。您可以直接声明它们(它们不是正则表达式中的特殊字符 - 好吧,-只是在集合内,:是如果伴随着其他字符,例如(?:),但这与您的情况无关) -
你的函数looks familiar :)
-
太棒了!那解决了!非常感谢ctwheels!我刚刚摆脱了括号,现在它可以工作了!