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+(?=\\)