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));
}
}
}
Run Code Online (Sandbox Code Playgroud)
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)
$
Run Code Online (Sandbox Code Playgroud)
Python代码(在Interpreter中):
>>> 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']
>>>
Run Code Online (Sandbox Code Playgroud)
那么,为什么Java无法匹配匹配的所有匹配?
这是因为java匹配的组是捕获括号.
你的正则表达式只有一组非转义(即捕获)括号,(.*?)
.
第1组包含匹配的值.
没有组2,因为正则表达式中没有第二组括号.
在java示例中,您希望循环遍历所有匹配项并进行打印matcher.group(1)
.
while ( matcher.find() ) {
System.out.println(matcher.group(1));
}
Run Code Online (Sandbox Code Playgroud)
注意while
,它将循环遍历所有匹配并告诉您每个匹配的组1.
归档时间: |
|
查看次数: |
1728 次 |
最近记录: |