gpt4 book ai didi

java - 检查结果是否唯一

转载 作者:行者123 更新时间:2023-12-01 22:40:05 24 4
gpt4 key购买 nike

我想从文本中提取长度为 3-5 的数字。下面的模式适用于我的所有案例。

    Pattern pattern = Pattern.compile("(^|[\\D]|.*[\\D])(?<number>[0-9]{3,5})($|[\\D]|[\\D].*)");

//Working examples always returns 111
//Matcher m = pattern.matcher("XX 111, YYY 37124091");
//Matcher m = pattern.matcher("XX 111");
//Matcher m = pattern.matcher("X111");
//Matcher m = pattern.matcher("111");

我遇到的唯一问题是,正如我相信的那样,模式应该找到几个匹配项,如下例所示 (111, 123),而它只返回 123

    Matcher m = pattern.matcher("XX 111, CCC 123 YYY 37124091");

while(m.find()){
System.out.println(m.group("number");
}

如何识别该模式确实匹配了 2 次,或者为什么它不匹配 111 和 123?

最佳答案

只需将其更改为惰性量词即可。

 # "(^|[\\D]|.*?[\\D])(?<number>[0-9]{3,5})($|[\\D])"

( # (1 start)
^
| [\D]
| .*? [\D]
) # (1 end)
(?<number> # (2 start)
[0-9]{3,5}
) # (2 end)
( # (3 start)
$
| [\D]
) # (3 end)

输出:

 **  Grp 0 -  ( pos 0 , len 7 ) 
XX 111,
** Grp 1 - ( pos 0 , len 3 )
XX
** Grp 2 - ( pos 3 , len 3 )
111
** Grp 3 - ( pos 6 , len 1 )
,

-----------------

** Grp 0 - ( pos 7 , len 9 )
CCC 123
** Grp 1 - ( pos 7 , len 5 )
CCC
** Grp 2 - ( pos 12 , len 3 )
123
** Grp 3 - ( pos 15 , len 1 )

关于java - 检查结果是否唯一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26306700/

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