我无法弄清楚这个正则表达式的预适应性

时间:2015-07-20 13:08:53

标签: java regex eclipse

我以为我是一名正则表达式专家,但我不明白为什么这不起作用。 我有两个字符串(这些是为了示例而构成的,以便不透露实际的个人数据):

汤姆史密斯会计(200),和 Bill Jones(15%)Special(310)

所以我想获得员工编号(你可以看到Bill在括号中有两个数字)。所以我想得到200和310.我用String变量“st”做了一个循环,在两者之间迭代:

public class MyMain {
 public static void main(String[] args) {
    String[] str = { "Tom Smith Accounting (200)", "Bill Jones (15%) Special (310)" };

    for (String st : str) {
        String cont = st.replace(".*(", "").replace(").*$", "");
        System.out.println(st + " === " + cont);
    }
 }
}

但结果与原始输入相同:

Tom Smith Accounting (200) === Tom Smith Accounting (200)
Bob Jones (15%) Special (310) === Bob Jones (15%) Special (310)

像这样使用替换 String cont = st.replace(“(”,“”); 通过去掉括号来实现:

Tom Smith Accounting (200) === Tom Smith Accounting 200)
Bill Jones (15%) Special (310) === Bill Jones 15%) Special 310)

String cont = st.replace(“)”,“”);

Tom Smith Accounting (200) === Tom Smith Accounting (200
Bill Jones (15%) Special (310) === Bill Jones (15% Special (310

我觉得如果我在linux中的ksh中这样做了(echo | sed's / ... / ...'它会起作用,所以我在这里做错了什么?replaceFirst()也不起作用(给出一个未公开的组错误。)

有人看到错误吗?是否有其他方法可以从括号中选择一个数字(如C中的sscanf())?

1 个答案:

答案 0 :(得分:2)

第一个错误:你使用replace而不是replaceAll(替换不使用正则表达式)

第二个错误:你没有逃脱()字符。

第三个错误:你的第一个正则表达式缺少一个^来表示该行的开头。

第四个错误:您应该使用[^(]代替.,因此它不会与开括号匹配。