Java 正则表达式得到1)而不仅仅是数字

Java 正则表达式得到1)而不仅仅是数字,java,regex,Java,Regex,我想对以下内容进行模式匹配: FirstName LastName (ID: 1) 代码: Pattern-Pattern=Pattern.compile(“^([A-Za-z0-9\].*)(ID:(?[0-9].*))$”; Matcher Matcher=pattern.Matcher(customer.getSelectedItem().toString()); if(matcher.matches()){ 字符串customerId=matcher.group(“customerId

我想对以下内容进行模式匹配:

FirstName LastName (ID: 1)
代码:

Pattern-Pattern=Pattern.compile(“^([A-Za-z0-9\].*)(ID:(?[0-9].*))$”;
Matcher Matcher=pattern.Matcher(customer.getSelectedItem().toString());
if(matcher.matches()){
字符串customerId=matcher.group(“customerId”);//返回1)而不是1
...

问题是我的正则表达式返回的是
1)
而不是
1
或任何数字。

删除
*
tahtt表示0或更多的任何字符(包括右括号):

Pattern.compile(“^([A-Za-z0-9\(]*)(ID:(?[0-9]*)\ \)\ \)$”;
如果不想捕获以下内容,也可以删除这些组:

Pattern.compile("^[\\w ]*\\(ID: (?<customerId>[0-9]*)\\)$");
Pattern.compile(“^[\\w]*\\(ID:(?[0-9]*)\\)$”;

由于您只对客户ID感兴趣,因此您将事情复杂化了。根据您的字符串模式
FirstName LastName(ID:1)
,以及您当前的模式(以及已接受答案的模式)除了在感兴趣的ID之后,没有结束偏执。因此,简单的积极回顾应该产生正确的结果:

\\d+(?=\\)

请参阅。如果必须,请添加结束字符串ancor
$

谢谢!我更喜欢第二个。您只是对客户ID感兴趣吗?字符串模式是否总是相同?@JvdV,是的。其余的都不重要。是否
\\d+(?=\\))
在您的案例中产生有效的结果?@JvdV,是的,但如果名称中有数字,它将失败。它真的不应该失败,除非后面有一个结束偏执(您当前和公认的模式不适用)。无论名称中是否有数字,对我来说都很好。因此,正面展望。
Pattern.compile("^[\\w ]*\\(ID: (?<customerId>[0-9]*)\\)$");
\\d+(?=\\)