2014-09-03 30 views
1

我有輸入數據如下爲:正則表達式組重新結構化

AB 
AB_Test 
AB_Test123 

預期輸出:

AB 
AB_Test 

我有正則表達式相匹配:

([A-Z]{2})(_([a-zA-Z]*))? 

Regular expression visualization

Debuggex Demo

所以從上面的正則表達式,我得到$ 1 & $ 3中的字符串。我想修改正則表達式,使字符串在$ 1 & $ 2(從正則表達式中忽略第2組)。

現在我想要使用該組處理匹配的字符串。這就是爲什麼我希望它是順序的。

有沒有辦法改變上面的正則表達式?

+0

嘗試'(([A-Z] {2})_?[a-zA-Z] *)'這是你在找什麼? [DEMO](http://regex101.com/r/mG3eL5/1) – Braj 2014-09-03 15:33:12

回答

2

如果你想消除具有數字字符串,使用負前向斷言:

^([A-Z]{2})(?!.*\d.*)(?:_([A-Za-z]*))? 

Demo

或者在串的兩端添加錨點:

^([A-Z]{2})(?:_([A-Za-z]*))?$ 

Demo 2

如果你我們e錨,如果您有多行目標,則需要使用m標誌。

+1

這是一個很棒的演示網站。我以前沒有見過。 – terrywb 2014-09-03 16:27:26

1

你需要使用一個非捕獲組你不想:

^([A-Z]{2})(?:_([a-zA-Z]*))?$

編輯:我還添加了開始和結束的錨,因爲它似乎要匹配線路只有下劃線後的字符全部是字母。

+0

我工作過:https://www.debuggex.com/r/rqVUMw4pxoj56Egr。會接受你的答案。謝謝.. – Ambrish 2014-09-03 15:25:35

+0

@Ambrish你是否得到您的文章中提到的預期輸出? – Braj 2014-09-03 15:26:51

+0

'*('a-zA-Z])*)'中'*'的位置不正確。它應該在組內。 – Ambrish 2014-09-03 16:24:11