gpt4 book ai didi

java - 我无法弄清楚这个正则表达式的复杂性

转载 作者:行者123 更新时间:2023-11-30 03:20:09 24 4
gpt4 key购买 nike

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

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(replace不使用正则表达式)

第二个错误:您没有转义 () 字符。

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

第四个错误:您应该使用 [^(] 而不是 .,因此它与左括号不匹配。

关于java - 我无法弄清楚这个正则表达式的复杂性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31517407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com