我以为我是一名正则表达式专家,但我不明白为什么这不起作用。 我有两个字符串(这些是为了示例而构成的,以便不透露实际的个人数据):
汤姆史密斯会计(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())?
答案 0 :(得分:2)
第一个错误:你使用replace而不是replaceAll(替换不使用正则表达式)
第二个错误:你没有逃脱(
和)
字符。
第三个错误:你的第一个正则表达式缺少一个^
来表示该行的开头。
第四个错误:您应该使用[^(]
代替.
,因此它不会与开括号匹配。