我有以下文字
Jul 31, 2015 - Departure 2 stops Total travel time:20 h 40 m
Aug 26, 2015 - Return 1 stop Total travel time:19 h 0 m Chicago
nonstop
我想获取看起来像“stop(s)”的文本和“nonstop”的所有实例之前的数字,但是我希望两者都在同一个捕获组中。
我写了这个正则表达式
(\d)(?:\Wstops?)|(nonstop)
这是我想要的,但如您所见,它由两个捕获组组成(第 1 组用于数字,第 2 组用于“不间断”),这可以通过单个捕获组完成吗?
我的另一个问题,是否可以使用正则表达式直接将“不间断”返回为 0,而不是稍后在代码中处理文本?
这是我的正则表达式的现场演示:regex101
最佳答案
你需要用正lookahead assertion .
Matcher m = Pattern.compile("\\d(?=\Wstops?)|nonstop").matcher(s);
while(m.find())
{
System.out.println(m.group());
}
\\d(?=\Wstops?)
仅当其后跟一个非单词字符后又跟字符串stop
时才匹配所有数字或停止
|
或者nonstop
匹配字符串nonstop
关于java - 正则表达式捕获组混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31401599/