我有这样的文本,我只需要提取第一行的数字
+1-415-655-0001 美国长途电话
接入码:197 703 792
我的正则表达式刚刚提取了所有数字
/d+
var noteStr = "1-415-655-0001 US TOLL\n\nAccess code: 197 703 792"
findCodeInWord()
func findCodeInWord() -> String?
{
let regex = try! NSRegularExpression(pattern: "\\d+", options: [])
var items = [String]()
regex.enumerateMatchesInString(noteStr, options: [], range: NSMakeRange(0, noteStr.characters.count)) { result, flag, stop in
guard let match = result else {
// result is nil
return
}
let range = match.rangeAtIndex(0)
var matchStr = (noteStr as NSString).substringWithRange(range)
print(matchStr)
}
return items.joinWithSeparator("")
}
但这会返回所有数字。我只想让它返回 14156550001
最佳答案
您可以使用基于 \G
运算符的单个正则表达式提取这些数字,并将数字捕获到第 1 组中:
\G(?:[^\d\n\r]*(\d+))
请参阅regex demo ,由于 \G
运算符与字符串的开头,然后是每次成功匹配的末尾,[^\d\n\r]*
字符类匹配除数字、LF 或 CR 之外的 0+ 个字符。
因此,当开始匹配时,1
被找到并捕获,然后-
与[^\d\n\r]*
,然后匹配并捕获415
等。当遇到\n
时,找不到更多匹配,则\G
anchor 失败因此,整个正则表达式搜索停止在第一行。
swift :
let regex = try! NSRegularExpression(pattern: "\\G(?:[^\\d\n\r]*(\\d+))", options: [])
...
let range = match.rangeAtIndex(1)
关于正则表达式仅返回新行字符之前的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36558430/