2016-11-12 49 views
0

我需要一個正則表達式這種投入:正則表達式 - 可選支架

AB: EF 
AB : EF 
AB (CD): EF 
AB (CD) XY: EF 

我需要3組。一個是AB,另一個是CD(如果沒有的話,可能是空的),第三個是EF。

如何編寫這樣的正則表達式?

我想:

(.*)?\s(\(.*\))\s?(.*)?:\s(.*) --- AB: EF doesn't match 
(.*)?\s?(\(.*\))\s?(.*)?:\s(.*) --- AB (CD): EF has the second group is empty 
+1

展現真實事例,並添加一個標籤爲您使用的語言。 –

+0

示例AB(CD)XY:EF'與您的描述不符»我需要3組«。應該有比賽嗎? – Socowi

+0

你需要三組然後XY是什麼? – Real73

回答

2

這將在最正則表達式引擎工作,see here

(\w{2}):? *(\((\w{2})\))?.*?: *(\w{2}) 

更換\w\d如果只想數字。

組1匹配AB,組3匹配CD,組4匹配EF

  • (\w{2})匹配AB,任何兩個字母數字字符
  • :? ?匹配可選:後跟任意數目的空格
  • (\((\w{2})\))?匹配可選CD,任何兩個字母數字字符,括號內
  • .*?:匹配任何字符,直到接下來:
  • *匹配任意數量的sp尖子:
  • (\w{2})匹配EF後,任意兩個字母數字字符
2
(\w+) ?(?:\(?(\w{2})\)?.*)?: (\w*) 

這不正是你所需要的。證明:https://regex101.com/r/1TlGy9/1

正如你所說,你需要3組,我假設你只是想將'XY'部分作爲可選項換句話說:你不想匹配它,但你希望其他組匹配甚至如果它存在。

0

如何:

\w*\s?(\(.*\))?\s?\w*:\s?\w*

這也可以應用。

感謝

+0

https://regex101.com/r/cQeRhO/1 嘿,你可以在屏幕右側的比賽信息中看到,這個正則表達式並沒有給出正確的組。我想檢查你的解決方案,因爲它看起來比我的要乾淨得多,但不幸的是它並沒有完成問題的要求。 –