gpt4 book ai didi

java - 如何从字符串正则表达式中提取数据

转载 作者:行者123 更新时间:2023-12-01 08:46:36 25 4
gpt4 key购买 nike

为什么在这段代码中我必须重复正则表达式模式 3 次才能找到 3 个单独的数字?我只想使用 ".*(\\d{10}+).*" 查找字符串 word 中的所有数字,但我必须重复已经3次了,为什么我做错了什么?

    public static void main (String [] args){

String word = " Some random mobile numbers 0546 105 610, 451 518 9675, 54 67892 541";
word = word.replaceAll("\\s+","");

Pattern pat = Pattern.compile(".*(\\d{10}+).*"+".*(\\d{10}+).*"+".*(\\d{10}+).*");
Matcher mat = pat.matcher(word);

while (mat.find()) {
for (int i = 1; i <= mat.groupCount(); i++) {
System.out.println(mat.group(i));
}
}

}

最佳答案

这是因为 .* 是一种贪婪模式(请参阅 Regex Quantifiers ),这意味着它将尝试从字符串中吃掉尽可能多的内容,同时仍然获得匹配项。因此,在您的情况下,它将捕获除最后一个数字之外的所有数字。

为了解决这个问题,您应该摆脱匹配所有模式 .*,因为 find 已经为您提供了包含其间任何内容的所有匹配项。

因此,仅使用 (\\d{10}) 就可以了。

public static void main (String [] args){
String word = " Some random mobile numbers 0546 105 610, 451 518 9675, 54 67892 541";
word = word.replaceAll("\\s+","");

Pattern pat = Pattern.compile("(\\d{10})");
Matcher mat = pat.matcher(word);

while (mat.find()) {
for (int i = 1; i <= mat.groupCount(); i++) {
System.out.println(mat.group(i));
}
}
}

关于java - 如何从字符串正则表达式中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42616218/

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