【发布时间】:2021-07-25 01:06:44
【问题描述】:
我想为 NAME;NAME;NAME 以及 NAME;NAME;NAME;NAME 提供一个正则表达式,其中 NAME 的第四次出现是可选的。
我有一个正则表达式作为 (.+);(.+);(.+) 匹配第一个模式但不匹配第二个。我试着玩?但它不适用于 (.+);(.+);(.+)(;(.+))? 基本上,我想将第四个 (.+) 实现为零或一次。
【问题讨论】:
-
点
.可以表示/匹配任何字符,包括;,这会使事情复杂化。代替.*,您可以使用;的否定,例如[^;]+。无论如何,正确的解决方案取决于您的真正目标是什么(我们不知道)。也许更简单的选择是拆分;或使用 CSV 解析器和;作为分隔符。 -
您也可以使用
(([^;]+);){2,4}([^;]+)。(([^;]+);){2,4}表示(([^;]+);)至少会出现 2 次但少于 4 次。 -
我想出了 ([^;]+;)?(.+);(.+);(.+) --> 它的问题在于 NAME;NAME;NAME组将是 2,3 和 4。这样做的任何更清洁的方式可能会有所帮助。根据 cmets 的另一个是 ([^;]+);([^;]+);([^;]+);?([^;]+)?
-
如果某些
String匹配它或从String中提取groups,您需要正则表达式来获取boolean结果? -
从字符串中提取分组。也更愿意坚持使用 DOT。
标签: java regex regex-group