2016-08-30 68 views
0

嘿,我有一個要求來增加我的UILables中用於雙重間隔換行符的間距。我想搜索我的字符串並找到所有以\n\n開頭的字符串。 。例如,「Hello world\nI am on the next line\n\nNow I'm on the next line and it's spaced more than before\nNow I'm back to normal spacing"遇到麻煩試圖找出這個正則表達式我想:在Swift中搜索以 n n開頭的字符串

let regExRule = "^\n\n*" 

並將它傳遞給這個函數:

func matchesForRegexInText(regex: String, text: String) -> [String] { 

     do { 
      let regex = try NSRegularExpression(pattern: regex, options: []) 
      let nsString = text as NSString 
      let results = regex.matchesInString(text, 
               options: [], range: NSMakeRange(0, nsString.length)) 
      return results.map { nsString.substringWithRange($0.range)} 
     } catch let error as NSError { 
      print("invalid regex: \(error.localizedDescription)") 
      return [] 
     } 
    } 

但是我得到一個空我不知道如何構造這個正則表達式模式,任何指針都會真正的讚賞,謝謝!

+0

你希望字符串在'\ n'或兩個'\ n \ n'之間,因爲兩個'\ n \ n'只出現一次。 –

+0

在您的示例字符串中嚴格說出,在兩個換行字符中沒有字符* *。順便說一句:在這種情況下將參數聲明爲隱式解包選項是無稽之談。 – vadian

+0

@vadian你是對的。問題編輯。 – Kex

回答

2

我看到的主要問題是正則表達式模式應該包括一個捕獲組來選擇需要的多個字符串

func matchesForRegexInText(regex : String, text: String) -> [String] { 
    var captured = [String]() 
    let exp = try! NSRegularExpression(pattern: regex, options: []) 
    let matches = exp.matchesInString(text, options:[], range: NSMakeRange(0, text.characters.count)) 

    for match in matches { 
     let c = (text as NSString).substringWithRange(match.rangeAtIndex(1)) 
     captured.append(c) 
    } 

    return captured 
} 

let re = "\\n\\n([\\w\\\\s,']+)"; // selection with (...) 

// ["Alpha", "Bravo", "Charlie"] 
let strResults = matchesForRegexInText(re, text: "\n\nAlpha\n\nBravo\n\nCharlie\n\n") 
+0

我更新了我的例子。我誤解了你的問題,認爲你使用的是字符'\ n'而不是新行。我認爲更新會有所幫助。 – Lightbeard

相關問題