gpt4 book ai didi

java - 正则表达式在固定位置匹配缺失的组

转载 作者:行者123 更新时间:2023-12-01 11:37:20 25 4
gpt4 key购买 nike

需要一个始终匹配的正则表达式(使用 matches(),而不是 find()),并且始终识别 3 组,针对 3 种不同的输入情况,例如

  1. 1234 ab$.5!c=:d6 efg(789)
  2. 1234 EFG(567)
  3. efg(567)

模式

(?:^(\d+)\s+(\S)\s)?\s*([^\(]+\(\S+\))

表示每组中预期的值类型(不假设字符位置),但仅在情况 #1 中正常工作,产生

1234, ab$.5!c:d6, efg(789)

对于情况 2 和 3,相同的模式不起作用,分别给出

null, null, ab$.5!c:d6 efg(789)
null, null, efg(789)

有什么想法吗?

最佳答案

您可以使用下面的正则表达式。

^(?:(\d+)\s+(?:(\S+)\s)?)?([^(]+\([^)]*\))$

DEMO

String s = "1234 efg(567)";
Matcher m = Pattern.compile("^(?:(\\d+)\\s+(?:(\\S+)\\s)?)?([^(]+\\([^)]*\\))$").matcher(s);
while(m.find()) {
if(m.group(1) != null)
System.out.println(m.group(1));
if(m.group(2) != null)
System.out.println(m.group(2));
if(m.group(3) != null)
System.out.println(m.group(3));
}

关于java - 正则表达式在固定位置匹配缺失的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29837269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com