2012-04-03 174 views
0

我有下面的格式創建樣品的測量設備:麻煩創建正則表達式

V GL020(1)=20110117161703

另一個例子:

V GLXX011(10)=ADEF=*GFSDAS

我試圖做的是創建一個正則表達式,第一個示例返回 GL020/1/20110117161703,第二個示例返回 GLXX011/10/ADEF=*GFSDAS

我發現可靠的拳頭兩個必需的部分相匹配的正則表達式:

.*?(?<Field>(?:[a-z][a-z]*[0-9]+[a-z0-9]*)).*?(?<Count>\d+)

但是,我還是第"="後缺少的一部分。我不知道它是否重要,但第一個"="之後的部分可能包含"="本身的字符。

+0

你遇到麻煩等號和之後的所有匹配?然後匹配一個等號+隨後的所有內容(當然包括更多的等號) – keyser 2012-04-03 11:18:03

+0

難道你不能只跳過前兩個字符('V')並用'('和')=替換'/'(如果它很重要,只是它們的第一次出現)? – Eric 2012-04-03 11:21:59

回答

4

你可以使用類似的表達式:

(\w+)\((\d+)\)=(\S+) 

給你,你在第一,第二和第三捕獲組希望子。

+0

+1我幾乎有完全相同的東西... – Robbie 2012-04-03 11:22:58

+0

大聲笑。哇。太簡單。我在那一個上花了幾個小時。 :((。非常感謝你,第三個捕獲組也可能包含空格,我將如何處理它? – lightxx 2012-04-03 11:23:22

+0

@lightxx,如果你只是想在第一個'='之後捕獲所有的東西,你可以改變'\ S +'到'。+'。('.'不匹配新行,除非你使用's'標誌。) – Qtax 2012-04-03 11:25:31

1

嘗試使用這一個:

([^\(|\s]+)\((\d+)\)=([\w|\=|\*]+) 
+0

抱歉,根本不工作。錯字? – lightxx 2012-04-03 11:25:40

+0

@stema,你確定喜歡編輯。;-) – Qtax 2012-04-03 11:30:17

+0

肯定overdid =) – 2012-04-03 11:49:50

0

請使用這個表達式:

(?<first>\w+)\s(?<second>\w+)(?<third>\(\d+\))=(?<forth>.*)