gpt4 book ai didi

java - 相同的正则表达式在 Java 和 Python 中具有不同的结果

转载 作者:行者123 更新时间:2023-12-01 06:57:03 24 4
gpt4 key购买 nike

Java 代码:

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

public class RegExpTest {
public static void main(String[] args) {

String str = "X-Value = -0.525108, Y-Value = 7.746691, Z-Value = 5.863008, Timestamp(milliseconds) = 23001";
String p = "Value = (.*?), ";
Pattern pattern = Pattern.compile(p);
Matcher matcher = pattern.matcher(str);
if (matcher.find()){
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
System.out.println(matcher.group(3));
}
}
}

Java 代码的输出:

$ java RegExpTest 
-0.525108
Exception in thread "main" java.lang.IndexOutOfBoundsException: No group 2
at java.util.regex.Matcher.group(Matcher.java:487)
at RegExpTest.main(RegExpTest.java:15)
$

Python 代码(在解释器中):

>>> import re
>>> re.findall("Value = (.*?), ", 'X-Value = -0.525108, Y-Value = 7.746691, Z-Value = 5.863008, Timestamp(milliseconds) = 23001;')
['-0.525108', '7.746691', '5.863008']
>>>

那么,为什么Java无法匹配所有匹配的出现?

最佳答案

这是因为 java 匹配的是一个捕获括号。

您的正则表达式只有一组非转义(即捕获)括号,即 (.*?)

组 1 包含匹配的值。

没有组 2,因为您的正则表达式中没有第二组括号。

在 java 示例中,您想要循环遍历所有匹配,并打印 matcher.group(1)

while ( matcher.find() ) {
System.out.println(matcher.group(1));
}

请注意 while,它将循环遍历所有匹配项并告诉您每个匹配项的第 1 组。

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

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