2017-04-03 55 views
1
TYPE1: Name Potential (parenthesis) (POSITION1) 
TYPE2: Name (POSITION2) 
TYPE3: Name with no Position 

我想提取3件事情。 TYPENAME,POSITION。該位置是可選的。名字可以有括號。 我嘗試了很多REGEX,但無法弄清楚如何非貪婪但仍然包括名稱的括號。正則表達式匹配非貪婪與可選結束

這應該是我最後的團體

  • TYPE1,名稱勢(括號),POSITION1
  • TYPE2,名稱,POSITION2
  • TYPE3,名稱

這一次沒有按第一個不匹配:
(?<TYPE>.*?):\s*(?<NAME>[^(]*)\s*(?:\((?<POSITION>.*?)\))?

這是太貪婪,我不提取的位置:
(?<TYPE>.*?):\s*(?<NAME>.*)\s*(?:\((?<POSITION>.*?)\))?

+1

Wherer你卡住了嗎?請張貼你的模式並解釋它有什麼問題。 –

+0

這裏你去...我已經添加了它。 – jsgoupil

+0

'type'只是一個單詞嗎? – anubhava

回答

1

你可以使用這個表達式與最後一組作爲一個可選的比賽:

^(?<TYPE>[^:]+):\h*(?<NAME>.+?)(?:\h+\((?<POSITION>[^)]+)\))?$ 

RegEx Demo

如果\h(水平空白)在您的正則表達式中不受支持,則改爲使用[ \t]

+1

這個效果很好。直到我發現NAME可能是空的。我更新了一點我的正則表達式,但是我基於你的!謝謝。 ^(? [^:] +):[\ t] *(?(?!\()。*?)(?:[\ t] * \((? [^)] +)\ ))?' – jsgoupil