java Matcher删除一些字符
我有一个字符串“Mo Sa 10:00-20:00”。我想要两组。第一组为Mo Sa,第二组为10:00-20:00。第一组只能包含一天,例如“Mo”。所以我想我需要以下正则表达式:java Matcher删除一些字符,java,regex,Java,Regex,我有一个字符串“Mo Sa 10:00-20:00”。我想要两组。第一组为Mo Sa,第二组为10:00-20:00。第一组只能包含一天,例如“Mo”。所以我想我需要以下正则表达式:([MTWFSouehrao-]{2,5})([0-9:-]{11})。 我的Java代码是: Matcher match = Pattern.compile("([MTWFSouehrao-]{2,5}) ([0-9:-]{11})").matcher("Mo-Sa 10:00-20:00"); if (match
([MTWFSouehrao-]{2,5})([0-9:-]{11})
。
我的Java代码是:
Matcher match = Pattern.compile("([MTWFSouehrao-]{2,5}) ([0-9:-]{11})").matcher("Mo-Sa 10:00-20:00");
if (match.matches() && match.find(1) && match.find(2)) {
String s = match.group(0); // -Sa 10:00-20:00
String s1 = match.group(1); // -Sa
String s2 = match.group(2); // 10:00-20:00
}
为什么第一组是“-Sa”而不是“mosa”?这是没有意义的…在您的情况下,您正在调用find(inti)
这可能不是您所期望的:它不会测试是否找到索引i
处的组,而是在重置匹配器后在索引i
处移动光标
所有条件都是true
,由于您使用的是&&
,因此所有条件都会被评估
因此,match.find(2)
是最后一次求值,因此分组从输入的索引2
开始
如果您只是删除这些条件,您的输出将是您所期望的:
if (match.matches()) {
...
输出
Mo-Sa 10:00-20:00
Mo-Sa
10:00-20:00
注意
为了测试组索引是否匹配,可以使用:
避免对不存在的组索引执行Matcher#groupCount()
sIndexOutOfBoundsException
并与Matcher.group(int i)
进行比较,以确定特定组是否满足其条件。这将要求首先调用null
或find
matches
- 文件