2016-08-30 3 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」または2つの「\ n \ n」の間に文字列を挿入するには、2つの「\ n \ n」が1回だけ出現する必要があります。 –

+0

サンプル文字列で厳密に話されていますが、2つの改行文字で囲まれた文字列*はありません。ところで:暗黙のアンラップされたオプションとしてパラメータを宣言することは、この場合ナンセンスです。 – 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

関連する問題