2012-06-06 72 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