我有这个文本,我只需要提取第一行的数字
+1-415-655-0001 US TOLL
Access code: 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
答案 0 :(得分:1)
"我有这个文本,我只需要提取第一行的数字"
虽然正则表达式有时非常有用,但对于从给定字符串中仅提取数字字符的简单任务,Swifts本机pattern matching是一个有用的工具;此处适用,因为数字UnicodeScalar
到0
的{{1}}表示顺序为:
9
答案 1 :(得分:1)
您可以使用基于\G
运算符的单个正则表达式提取这些数字,并将数字捕获到第1组:
\G(?:[^\d\n\r]*(\d+))
请参阅regex demo,它只会捕获到第1行的第1组数字序列(1个或更多,(\d+)
),因为\G
运算符匹配于字符串的开头,然后是每个成功匹配的结尾,[^\d\n\r]*
字符类匹配除数字,LF或CR之外的0+个字符。
因此,当它开始匹配时,找到并捕获1
,然后-
与[^\d\n\r]*
匹配,然后匹配并捕获415
,等等。{遇到{1}},找不到更多匹配,\n
锚点失败,因此整个正则表达式搜索在第一行停止。
夫特:
\G