Java 检查结果是否唯一
我想从文本中提取一个长度为3-5的数字。下面的模式适用于我的所有案例Java 检查结果是否唯一,java,regex,Java,Regex,我想从文本中提取一个长度为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"); //Mat
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");
我如何确定模式匹配了2次,或者为什么它不匹配111和123
我遇到的唯一问题是,正如我所相信的,当模式应该找到下面示例(111123)中的几个匹配项时,它只返回123
Matcher m = pattern.matcher("XX 111, CCC 123 YYY 37124091");
while(m.find()){
System.out.println(m.group("number");
}
你需要使量词不情愿而不是贪婪
为您的数据
XX 111, CCC 123 YYY 37124091
*\\D
零件将能够匹配
"XX 111, CCC "
^---------^^
| |
.* \\D
消费111
试着改变
Pattern.compile("(^|\\D|.*\\D)(?<number>[0-9]{3,5})($|\\D|\\D.*)");
Pattern.compile((^ |\\D |。*\\D)(?[0-9]{3,5})($|\\D |\\D.*);
到
Pattern.compile((^ |\\D |。*?\\D)([0-9]{3,5})($|\\D |\\D.*));
//添加这些^^
另外,\\D
本身就是字符类,所以您不需要用[…]
包围它。换句话说,你不需要把它写成[\\D]
,简单的\\D
就足够了
我如何确定模式匹配了2次 正则表达式不会记住以前匹配的所有结果。如果只想获得唯一的值,请将它们存储在集合中 我遇到的唯一问题是,正如我所相信的,当模式应该找到下面示例(111123)中的几个匹配项时,它只返回123
Matcher m = pattern.matcher("XX 111, CCC 123 YYY 37124091");
while(m.find()){
System.out.println(m.group("number");
}
你需要使量词不情愿而不是贪婪
为您的数据
XX 111, CCC 123 YYY 37124091
*\\D
零件将能够匹配
"XX 111, CCC "
^---------^^
| |
.* \\D
消费111
试着改变
Pattern.compile("(^|\\D|.*\\D)(?<number>[0-9]{3,5})($|\\D|\\D.*)");
Pattern.compile((^ |\\D |。*\\D)(?[0-9]{3,5})($|\\D |\\D.*);
到
Pattern.compile((^ |\\D |。*?\\D)([0-9]{3,5})($|\\D |\\D.*));
//添加这些^^
另外,\\D
本身就是字符类,所以您不需要用[…]
包围它。换句话说,你不需要把它写成[\\D]
,简单的\\D
就足够了
我如何确定模式匹配了2次 正则表达式不会记住以前匹配的所有结果。如果只想获得唯一的值,请将它们存储在集合中 我遇到的唯一问题是,正如我所相信的,当模式应该找到下面示例(111123)中的几个匹配项时,它只返回123
Matcher m = pattern.matcher("XX 111, CCC 123 YYY 37124091");
while(m.find()){
System.out.println(m.group("number");
}
你需要使量词不情愿而不是贪婪
为您的数据
XX 111, CCC 123 YYY 37124091
*\\D
零件将能够匹配
"XX 111, CCC "
^---------^^
| |
.* \\D
消费111
试着改变
Pattern.compile("(^|\\D|.*\\D)(?<number>[0-9]{3,5})($|\\D|\\D.*)");
Pattern.compile((^ |\\D |。*\\D)(?[0-9]{3,5})($|\\D |\\D.*);
到
Pattern.compile((^ |\\D |。*?\\D)([0-9]{3,5})($|\\D |\\D.*));
//添加这些^^
另外,\\D
本身就是字符类,所以您不需要用[…]
包围它。换句话说,你不需要把它写成[\\D]
,简单的\\D
就足够了
我如何确定模式匹配了2次 正则表达式不会记住以前匹配的所有结果。如果只想获得唯一的值,请将它们存储在集合中 我遇到的唯一问题是,正如我所相信的,当模式应该找到下面示例(111123)中的几个匹配项时,它只返回123
Matcher m = pattern.matcher("XX 111, CCC 123 YYY 37124091");
while(m.find()){
System.out.println(m.group("number");
}
你需要使量词不情愿而不是贪婪
为您的数据
XX 111, CCC 123 YYY 37124091
*\\D
零件将能够匹配
"XX 111, CCC "
^---------^^
| |
.* \\D
消费111
试着改变
Pattern.compile("(^|\\D|.*\\D)(?<number>[0-9]{3,5})($|\\D|\\D.*)");
Pattern.compile((^ |\\D |。*\\D)(?[0-9]{3,5})($|\\D |\\D.*);
到
Pattern.compile((^ |\\D |。*?\\D)([0-9]{3,5})($|\\D |\\D.*));
//添加这些^^
另外,\\D
本身就是字符类,所以您不需要用[…]
包围它。换句话说,你不需要把它写成[\\D]
,简单的\\D
就足够了
我如何确定模式匹配了2次
正则表达式不会记住以前匹配的所有结果。如果只想获得唯一的值,请将它们存储在集合中 只需将其更改为惰性量词即可
# "(^|[\\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)
把它改成一个懒惰的量词
# "(^|[\\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)
把它改成一个懒惰的量词
# "(^|[\\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)
把它改成一个懒惰的量词
# "(^|[\\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)
对于识别三到五位数的数字,您想使用这样的东西来识别三到五位数的数字,您想使用这样的东西来识别三到五位数的数字,您想使用这样的东西来识别三到五位数的数字\b要识别三到五位数的数字,您需要使用类似以下内容
\b[1-9]\d{2,4}\b
您使用的是Java 7吗?@sln yes使用的是最新的1.7。您使用的是Java 7吗?@sln yes使用的是最新的1.7。您使用的是Java 7吗?@sln yes使用的是最新的1.7。不回答问题,但可能是一个有用的注释。不回答问题,但可能是有用的评论。不回答问题,但可能是有用的评论。不回答问题,但可能是有用的评论。