2016-04-29 95 views
1

你好,我想提取()之間的文本。Swift正則表達式用於在括號之間提取單詞

例如:

(some text) some other text -> some text 
(some) some other text  -> some 
(12345) some other text -> 12345 

括號之間的字符串應該是10個字符的最大長度。

(TooLongStri) -> nothing matched because 11 characters 

我有什麼目前:

let regex = try! NSRegularExpression(pattern: "\\(\\w+\\)", options: []) 

regex.enumerateMatchesInString(text, options: [], range: NSMakeRange(0, (text as NSString).length)) 
{ 
    (result, _, _) in 
     let match = (text as NSString).substringWithRange(result!.range) 

     if (match.characters.count <= 10) 
     { 
      print(match) 
     } 
} 

其作品很好,但比賽有:

(some text) some other text -> (some text) 
(some) some other text  -> (some) 
(12345) some other text -> (12345) 

因爲()也被計算在內不符合< = 10。

我如何更改上面的代碼來解決這個問題?我還想通過擴展正則表達式來保留長度信息來刪除if (match.characters.count <= 10)

回答

3

您可以使用

"(?<=\\()[^()]{1,10}(?=\\))" 

見​​

模式:

  • (?<=\\() - 斷言當前POSI前(的存在重刑和失敗的比賽如果沒有,則
  • [^()]{1,10} - 比()等1到10個字符相匹配(含\w取代[^()]如果你只需要匹配字母/下劃線)
  • (?=\\)) - 如果有一個檢查在當前位置之後的文字),如果沒有則匹配失敗。

如果你能調整你的代碼來獲得在範圍1(攝影組)的值,你可以使用一個簡單的正則表達式:

"\\(([^()]{1,10})\\)" 

regex demo。您需要的值在Capture組1中。

2

這將工作

\((?=.{0,10}\)).+?\) 

Regex Demo

這也將工作

\((?=.{0,10}\))([^)]+)\) 

Regex Demo

正則表達式擊穿

\(#Match the bracket literally 
(?=.{0,10}\)) #Lookahead to check there are between 0 to 10 characters till we encounter another) 
([^)]+) #Match anything except) 
\) #Match) literally 
相關問題