我有以下文字
2015年7月31日 - 出发2站总行程时间:20小时40米 2015年8月26日 - 返回1站总行程时间:19小时0分钟芝加哥
不间断
我希望得到文本之前的数字,看起来像"停止"以及" nonstop"的所有实例,但是我希望两者都在同一个捕获组中。
我写了这个正则表达式
(\d)(?:\Wstops?)|(nonstop)
这就是我想要的,但正如你所看到的那样,它包含两个捕获组(数字组#1和#3组#2;不间断'),这可以用一个捕获组完成吗?
我的另一个问题是,是否可以直接返回'直飞'使用正则表达式为0,而不是稍后处理代码中的文本?
以下是我的正则表达式的现场演示:regex101
答案 0 :(得分:4)
您需要使用正lookahead assertion。
Matcher m = Pattern.compile("\\d(?=\Wstops?)|nonstop").matcher(s);
while(m.find())
{
System.out.println(m.group());
}
\\d(?=\Wstops?)
仅匹配所有数字,如果后面跟着非字字符,后跟字符串stop
或stops
|
或
nonstop
匹配字符串nonstop