2016-12-20 21 views
2

我需要匹配以下變體。java中需要的複雜正則表達式幫助

annotation: 103810471047 
annotation: 1038104710 
ANnoTAtION: 1038104710 
ANnoTAtION: 103810571057 
Annotation: asdf1234-as12-as12-as12-asdf1234asdf-abcd1234asdf1234asdf12 
ANNotation: asdf1234-as12-as12-as12-asdf1234asdf-abcd1234asdf1234asdf12 

我有麻煩提出正確的表達式。 到目前爲止,我已經嘗試了以下兩種前瞻。

\b(\Qannotation\E|)\b((?=[^\w\r\n\.!\?$]{0,5}?)(?:[A-Z\d]+\b|(["']).*?\3))|((?=[\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12}-[\w]{22}\b)[\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12}-[\w]{22}\b)|((?=[\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12}-[\w]{22}\b)[\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12}-[\w]{22}\b) 

但它似乎不匹配正確。我需要它匹配任何匹配大小寫不敏感的註釋,跟隨8-12位數字或連字符分隔的單詞列表中的8,4,4,4,12,22個字符。它應該返回2組。 第一組是單詞「註釋」 第二組是8-12位數字,或連字符分隔單詞列表中有8,4,4,4,12,22個字符。

回答

3

你可以嘗試正則表達式:(?i)annotation:.*?\s(?:(?:\d{8,12})|(?:\w{8}-\w{4}-\w{4}-\w{4}-\w{12}-\w{22}))

Demo here

+0

如果標註之間,可以有非字非返回字符的任意號碼? 如果我正確理解這一點,它將整個事件作爲一個單獨的組捕獲,是否有方法將它捕獲爲2個不同的組? –

+0

@JettinYeh - 你能舉個例子嗎? – TheLostMind

+0

例如,註釋:​​::: 123456789 組1組2 –