正则表达式只返回一个新行字符的数字

时间:2016-04-11 20:16:17

标签: regex swift

我有这个文本,我只需要提取第一行的数字

+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

2 个答案:

答案 0 :(得分:1)

  

"我有这个文本,我只需要提取第一行的数字"

虽然正则表达式有时非常有用,但对于从给定字符串中仅提取数字字符的简单任务,Swifts本机pattern matching是一个有用的工具;此处适用,因为数字UnicodeScalar0的{​​{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