gpt4 book ai didi

java - 正则表达式问题 - 匹配器需要很多时间来匹配。

转载 作者:行者123 更新时间:2023-11-29 03:36:18 24 4
gpt4 key购买 nike

我想处理包含以下行的源文件,文件包含超过 100 列,并且是制表符分隔文件。

private static Matcher FILE_NAME_REGEX = Pattern.compile("^\\w+\\d(F|G|H|J|K|M|N|Q|U|V|X|Z)\t169\t3(.*\t){26}\\d{4}/\\d{2}/\\d{2}.*",Pattern.CASE_INSENSITIVE).matcher("");

String line = "CGAS0Z 169 3 38977.5 02:30:00 -350 76000 75700 2255 76000 76000 76000 588 2 76000 06:35:15 2013/03/04 2013/03/05 02:17:40 CGAS 1 JPY CHUKYO Gasoline Futures CHUKYO Gasoline CONT (CGAS3H) JP FUD 169 RES XTKT 2013/03/05 2013/03/05 2013/03/05 10 76350 10 81950 61500 4296057 19178.8258928571 224 CGAS 2013/03/25 116.3987300506 0.5196371877 75700 2255 0.7841672 8.582539 23.298309 12.458333";

if (FILE_NAME_REGEX.reset(line).matches()) {
System.out.println(":)");
} else {
System.out.println(":(");
}

当我测试这段代码时,它会花费很多时间。有人可以解释一下这有什么问题吗?

最佳答案

我会这样尝试:

Pattern.compile("^\\w+\\d[FGHJKMNQUVXZ]\t169\t3([^\t]*\t){26}\\d{4}/\\d{2}/\\d{2}.*",Pattern.CASE_INSENSITIVE)

([^\t]*\t){26} 应该比 (.*\t){26} 快得多,因为它只有一个匹配文本的方法。如果需要,这也可以进行调整以支持带引号的值中的制表符。

此外,如果您希望 ^ 按预期工作,您将需要使用 (?m)Pattern.MULTILINE 标志搜索整个文件,而不仅仅是一行。

关于java - 正则表达式问题 - 匹配器需要很多时间来匹配。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15354193/

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