gpt4 book ai didi

java - 正则表达式匹配器未给出预期结果。没有正确匹配号码

转载 作者:行者123 更新时间:2023-11-30 07:52:31 25 4
gpt4 key购买 nike

我不明白为什么第二组只给我 0。我期望 3000。请给我指向一个我可以更好地理解的资源。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches {

public static void main( String args[] ) {
// String to be scanned to find the pattern.
String line = "This order was placed for QT3000! OK?";
String pattern = "(.*)(\\d+)(.*)";

// Create a Pattern object
Pattern r = Pattern.compile(pattern);

// Now create matcher object.
Matcher m = r.matcher(line);
if (m.find( )) {
System.out.println("Found value: " + m.group(0) );
System.out.println("Found value: " + m.group(1) );
System.out.println("Found value: " + m.group(2) );//?
System.out.println("Found value: " + m.group(3) );
}else {
System.out.println("NO MATCH");
}
}
}

最佳答案

精确模式,在\d模式前加上QT,或者用.*?代替第一个.* 以获得尽可能少的字符。

String pattern = "(.*QT)(\\d+)(.*)";

String pattern = "(.*?)(\\d+)(.*)";

会做。查看Java demo .

(.*QT)(\\d+)(.*) 将匹配并捕获第 1 组中除换行符以外的任何 0+ 个字符,尽可能多,直到QT 的最后一次出现(后跟后续子模式),然后将匹配并捕获 1+ 位数字到第 2 组,然后匹配并将行的其余部分捕获到第 3 组。

替代模式中的 .*? 将匹配并捕获除换行字符以外的任何 0+ 个字符,尽可能,直到第一个1 个或多个数字的 block 。

您也可以使用更简单的模式,如 String pattern = "QT(\\d+)"; 来获取 QT 之后的所有数字,结果将在然后是第 1 组(数字前后没有文字)。

关于java - 正则表达式匹配器未给出预期结果。没有正确匹配号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45796601/

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