给定以下内容:
"John Smith"
"John Smith (123)"
"John Smith (123) (456)"
我想捕捉:
"John Smith"
"John Smith", "123"
"John Smith (123)", "456"
什么Java正则表达式可以让我做到这一点?
我已经尝试过了(.+)\s\((\d+)\)$
,它对于“约翰·史密斯(123)”和“约翰·史密斯(123)(456)”都适用,但是对“约翰·史密斯”却不起作用。如何更改正则表达式以使其也可用于第一个输入?
您可以将第一个.+
懒惰的人变成懒惰的人,然后用一个非捕获的可选组来包裹后面的部分:
(.+?)(?:\s\((\d+)\))?$
^ ^^^ ^^
参见正则表达式演示
实际上,如果将正则表达式与String#matches()
最后一个一起使用$
是多余的。
详细资料 :
(.+?)
-组1捕获除换行符以外的一个或零个字符,并且尽可能少(因此,允许随后的子模式“落入”组)(?:\s\((\d+)\))?
-可选的空格序列(
,第2组捕获1个以上的数字和一个)
$
-弦锚的末端。一个Java的演示:
String[] lst = new String[] {"John Smith","John Smith (123)","John Smith (123) (456)"};
Pattern p = Pattern.compile("(.+?)(?:\\s\\((\\d+)\\))?");
for (String s: lst) {
Matcher m = p.matcher(s);
if (m.matches()) {
System.out.println(m.group(1));
if (m.group(2) != null)
System.out.println(m.group(2));
}
}
问题内容: 我在尝试将我的javascript regex经验转移到Python时遇到了麻烦。 我只是想让它工作: …但是它打印无。如果我做: 它匹配…默认情况下是否匹配字符串的开头?当匹配时,如何使用结果? 我如何进行第一场比赛?是否有比python网站提供的文档更好的文档? 问题答案: 隐式添加到您的正则表达式的开头。换句话说,它仅在字符串的开头匹配。 将在所有位置重试。 一般来说,建议您在需
问题内容: 我在用Python将字符串中的数字匹配时遇到麻烦。尽管应该明确匹配,但甚至不匹配 或仅匹配。我的监督在哪里? 问题答案: 阅读文档:http : //docs.python.org/2/library/re.html#re.match 如果在零个或多个字符 开头 的 字符串 您要使用(或)
问题内容: 我会在开头提到这个问题,尽管我离正则表达式专家很远,但是它们对我来说并不完全陌生。对于我来说,构建正则表达式来搜索特定字符串中的模式通常不是问题,但是我有一个(也许是?)独特的情况。 我有一组价值观,例如: 028938 DEF567987 390987.456 GHI345928.039 我想匹配一组特定的字符串,例如: 完全由6位数字组成的字符串 字符串,由正好6位数字,十进制组成
我正在arround制作一个与字符串的某个块匹配的正则表达式,问题是它包含许多相似的块,并且没有清楚地分开,所以我不知道如何停止正则表达式。 字符串的例子 所以我要做的是匹配并只选择第一个A1。到目前为止,我所做的是:
本文向大家介绍String字符串匹配javascript 正则表达式,包括了String字符串匹配javascript 正则表达式的使用技巧和注意事项,需要的朋友参考一下 在JavaScript代码中使用正则表达式进行模式匹配经常会用到String对象和RegExp对象的一些方法,例如replace、match、search等方法,下面所述是对相关方法使用的总结,需要的朋友参考下。 String对
我正在使用adobe javascript中的正则表达式在绘图标题栏中查找一串单词。从数字(1)开始,然后是日期,然后是不同数量的单词和4组首字母 图形标题栏示例具有以下内容: 1 20.09.16 此测试的更改 SB SB BW CR 0 29.07.16批准用于施工MM SB BW GM 正则表达式结果是 对于建筑MM SB BW GM 1 20.09.16本试验的变更 我需要正则表达式是 1