2012-06-06 96 views
0

我可以知道如何使用REGEX提取以下數據?使用REGEX提取數據

1)TEXTA; TEXTB; textC; textD

提取物 「TEXTA; TEXTB; textC」 又名textD

2)TEXTA的母體; TEXTB; textC; textD AB(numberA)

提取物 「TEXTA; TEXTB; textC; textD」 又名AB的母(numberA)

3)TEXTA; TEXTB; textC; textD AB(numberA) 提取物 「numberA」 用於比較

當前實現,我使用java字符串函數,這使得它不可配置。我懷疑用戶沒有給我實際的數據,我需要在不久的將來再次改變這個功能。我希望使用正則表達式來使功能可配置。

回答

3
  1. (.*);[a-zA-Z]+ - 新臺幣$ 30
  2. (.*) .* - 新臺幣$ 30
  3. .* .*\((.*)\) - 新臺幣$ 30
    如何使用正則表達式和組:http://www.javamex.com/tutorials/regular_expressions/capturing_groups.shtml
    例子:

    String s = "textA;textB;textC;textD"; 
    Pattern pt = Pattern.compile("(.*);[a-zA-Z]+"); 
    Matcher mt = pt.matcher(s); 
    if(mt.matches()) 
        System.out.println(mt.group(1)); 
    

這打印:textA;textB;textC
UPD:由於模式未知,所以回答如1)textA;textB;textC;(textD)也是如此。當問這樣的問題時,最好寫出模式,即使你不知道只能使用單詞的正則表達式。
UPD:thx for correction

+0

小心解釋一下..我嘗試使用http://www.regexplanet.com/advanced/java/index.html進行測試它不起作用。 – seesee

+0

我沒有測試過這個,但我認爲第3個正則表達式是不正確的。我認爲它會匹配「AB(numberA)」,而要求匹配「numberA」。它應該不是像'。*。* \((。*)\)' - $ 1 – Sicco

+0

對於N°3:'「。* \\(([A-Fa-f0-9,。] {1,128提取數字(帶基本格式符號)如果沒有等待十六進制數字,請移除字母,並按照您喜歡的方式管理其他符號以保持接近正確傳輸的字符串,您還可以調整大小爲「{128 }'最大長度的數字 –

0

可以簡單地使用它嗎?

String[] arr = "textA;textB;textC;textD AB".spilt("[; ]"); 
+0

我無法自定義它。你知道用戶嗎? – seesee