【发布时间】:2015-10-09 15:06:24
【问题描述】:
我以为我是正则表达式专家,但我不明白为什么这不起作用。 我有两个字符串(这些是为示例而编造的,以免泄露实际的个人数据):
Tom Smith 会计 (200),以及 比尔琼斯 (15%) 特别 (310)
所以我想获取员工编号(您可以看到 Bill 在括号中有两个数字)。所以我想得到 200 和 310。我用字符串变量“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())?
【问题讨论】:
-
replace不接受正则表达式。replaceAll会。 -
你正试图用铅笔挖一口井!。你会破坏 tip,一切都会崩溃。不要使用正则表达式进行 解析(看起来像 部署代码)
-
哦,是的,我确实尝试过逃避它们。 (在java中你必须使用double,比如"\(" like st.replace(".*\(", "").replace("\).*$", "")