2016-05-12 12 views
0

Я пытаюсь захватить первый разделитель, используемый в номере телефона, чтобы определить, что используется как внутренний разделитель чисел и что используется для разделения двух чисел.Могу ли я остановить запись группы захвата?

Сейчас я могу определить последний разделитель. Кажется, что группа захвата перезаписывается каждый раз при получении нового значения. Есть ли способ сохранить то, что было сначала захвачено с использованием флага или определенного быстрого метода?

Regex

(?:\\d([\\-\\. ])?){7,15} 

Swift Метод

func regexParse(pattern:String, captureGroup:Int, caseSensitive:Bool) ->[String] 
{ 
    do 
    { 
     //Creates empty results array. 
     var resultsArray = [String]() 

     //Sets Case sensitivity 
     var caseSensitivity = NSRegularExpressionOptions.CaseInsensitive 
     if(caseSensitive) 
     { 
      caseSensitivity = NSRegularExpressionOptions.init(rawValue: 0) 
     } 

     //Sets regex to correct pattern 
     let regex = try NSRegularExpression(pattern: pattern, options: caseSensitivity) 
     //Converts string to NSString as swift doesn't support regex 
     let nsString = self as NSString 

     //Sets parsing range to the entire string 
     let all = NSMakeRange(0, nsString.length) 

     //Enumerates through all matches and extracts the 1st capture bracket for each match and adds it to the resultsArray. 

     regex.enumerateMatchesInString(self, options: NSMatchingOptions(rawValue: 0), range: all) { (result: NSTextCheckingResult?, _, _) in 
      let capturedRange = result!.rangeAtIndex(captureGroup) 
      if !NSEqualRanges(capturedRange, NSMakeRange(NSNotFound, 0)) 
      { 
       let theResult = nsString.substringWithRange(capturedRange) 
       resultsArray.append(theResult) 
      } 
     } 
     return resultsArray 

    } 
    catch 
    { 
     print("Invalid regex") 
     return(["Error"]) //Maybe refactor this for something that's impossible to be a valid result 
    } 
} 
+0

[понравилось] (https://regex101.com/r/rF5qJ7/4)? –

+0

@ThomasAyoub Отличная благодарность, не стесняйтесь ставить его в качестве ответа. – Deco

ответ

1

Вы должны использовать это регулярное выражение:

\d+([-. ])[-.\d]* 

Чтобы получить разделитель, который будет находиться в группе захвата

Смежные вопросы