java - 在java中的正则表达式上重复相同的模式?
问题描述
我有一个字符串,它可能具有以下两种格式之一:
(someName,true);
(其中 someName 可以是字母和数字的任意组合,在逗号之后是true
orfalse
)(someName,true), (anything,false), (pepe12,true);
在这种情况下,我们可以有尽可能多的括号组,但它们用逗号加空格分隔。
给定以下测试集:
(hola,false);
comosoy12,true);
caminare)
true,comoestas
我使用了以下正则表达式^\(.*,(true|false)[)][;$]
并得到了我的预期结果true, false, false, false
(快速检查here)。但是对于以下情况,我似乎无法想出正则表达式:
(someName,true), (anything,false), (pepe12,true);
(hola,false);
comosoy12,true);
(batman,true), (kittycat,false);
(batman,true); (kittycat,false);
哪个应该返回true, true, false, true, false
。
解决方案
您可以使用
^\(\w+,(?:true|false)\)(?:,\s*\(\w+,(?:true|false)\))*;$
请参阅正则表达式演示。注意.*
,当您想匹配字母和数字时,您的模式可以匹配除换行符以外的任何 0+ 字符,因此我建议\w
(注意它也匹配_
),或者,您可以使用\p{Alnum}
or [A-Za-z0-9]
。
图案细节
^
- 字符串的开始\(\w+,(?:true|false)\)
-block
:(
, 1+ 字字符(或字母数字,如果您使用[a-zA-Z0-9]
or\p{Alnum}
),,
,true
或false
(?:,\s*\(\w+,(?:true|false)\))*
- 0个或多个序列,
- 逗号\s*
- 0+ 个空格\(\w+,(?:true|false)\)
-block
图案
;
- 一个;
字符$
- 字符串结束
在 Java 中,您可以动态构建正则表达式,并且由于您想要与 的完整字符串匹配matches
,您可以丢弃初始^
和最终$
锚点:
String block = "\\(\\w+,(?:true|false)\\)";
String regex = block + "(?:,\\s+" + block + ")*;";
bool result = s.matches(regex);
在线查看 Java 演示:
List<String> strs = Arrays.asList("(someName,true), (anything,false), (pepe12,true);","(hola,false);","comosoy12,true);", "(batman,true), (kittycat,false);", "(batman,true); (kittycat,false);");
String block = "\\(\\w+,(?:true|false)\\)";
String regex = block + "(?:,\\s+" + block + ")*;";
Pattern p = Pattern.compile(regex);
for (String str : strs)
System.out.println(str + " => " + p.matcher(str).matches());
输出:
(someName,true), (anything,false), (pepe12,true); => true
(hola,false); => true
comosoy12,true); => false
(batman,true), (kittycat,false); => true
(batman,true); (kittycat,false); => false
推荐阅读
- android - Room:如何在 DAO 接口中使用@Transaction
- c - 尝试运行一个排序 C 程序,该程序通过命令行(Mac 终端)接受输入
- node.js - 使用 Google Cloud Endpoints 进行 API 身份验证
- node.js - 我们如何动态修改模板引擎 (ejs) 上的 DOM 元素?
- javascript - g元素内的D3文本定位
- javascript - 为什么 .matchMedia 在这些特定条件下不起作用?
- tensorflow - 如何保存 Tf.contrib 模型修剪?
- javascript - 哈希表:赎金笔记 - Javascript 中的黑客排名
- java - ObjectMapper - 如何将地图转换为 POJO
- python - win10中的tensorflow安装失败,setup.py错误代码1