gpt4 book ai didi

java - Python 和 Java 中相同正则表达式的不同行为

转载 作者:太空狗 更新时间:2023-10-30 02:29:50 24 4
gpt4 key购买 nike

首先,我很抱歉,因为我不太了解正则表达式。

我正在使用正则表达式来匹配字符串。我在 Python 命令行界面中测试了它,但是当我在 Java 中运行它时,它产生了不同的结果。

Python 执行:

re.search("[0-9]*[\\.[0-9]+]?[^0-9]*D\\([M|W]\\)\\s*US", "9.5 D(M) US");

给出的结果为:

<_sre.SRE_Match object; span=(0, 11), match='9.5 D(M) US'>

但是Java代码

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

class RegexTest {
private static final Pattern FALLBACK_MEN_SIZE_PATTERN = Pattern.compile("[0-9]*[\\.[0-9]+]?[^0-9]*D\\([M|W]\\)\\s*US");

public static void main(String[] args) {
String strTest = "9.5 D(M) US";
Matcher matcher = FALLBACK_MEN_SIZE_PATTERN.matcher(strTest);
if (matcher.find()) {
System.out.println(matcher.group(0));
}
}
}

输出如下:

5 D(M) 美国

我不明白为什么它的行为方式不同。

最佳答案

这是在 Java 和 Python 中同样有效的模式:

"[0-9]*(?:\\.[0-9]+)?[^0-9]*D\\([MW]\\)\\s*US"

参见 PythonJava演示。

在 Python 中,[\\.[0-9]+]? 被读取为 2 个子模式:[\.[0-9]+(1 或更多 .[,或数字)和 ]?(0 或 1 ])。看看如何your regex works in Python here .或者,通过捕获组的更多细节化,here .

在 Java 中,它被读取为一个单独的字符类(即 []忽略,因为它们不能被正确解析正则表达式引擎,因此整个子模式代表 0 或 1 .、数字或 +)并且由于它是可选的,因此它没有捕获任何内容(您可以Visual Regex Tester 的视觉提示,输入 123.+[][\.[0-9]+]? 作为正则表达式)。

最后一点:[M|W] 代表 M|W,虽然我认为你的意思是 [MW] = MW

关于java - Python 和 Java 中相同正则表达式的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30527195/

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