gpt4 book ai didi

java Matcher删除一些字符

转载 作者:行者123 更新时间:2023-11-30 10:58:31 39 4
gpt4 key购买 nike

我有以下字符串“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.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”而不是“Mo-Sa”?这没有意义...

最佳答案

您正在根据您的情况调用 find(int i)

这可能不是您所期望的:它不会测试是否找到索引 i 处的组,而是在重置后将光标移动到索引 i 处匹配器。

所有条件都为 true,并且由于您使用的是 &&,因此所有条件都会被评估。

因此,match.find(2) 是最后计算的,因此您的分组从输入的索引 2 开始。

如果您只是删除这些条件,您的输出将是您所期望的:

if (match.matches()) {
...

输出

Mo-Sa 10:00-20:00
Mo-Sa
10:00-20:00

注意

为了测试一个分组索引是否匹配,可以使用:

  • Matcher#groupCount() 避免 IndexOutOfBoundsException 出现在不存在的组索引上
  • Matcher.group(int i) 并与 null 进行比较,以查找特定组是否满足其条件。这将需要首先调用 findmatches
  • 文档 here

关于java Matcher删除一些字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32222974/

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