gpt4 book ai didi

Java 正则表达式匹配不匹配或的单词集,其余工作正常

转载 作者:行者123 更新时间:2023-11-30 07:39:47 24 4
gpt4 key购买 nike

我正在尝试编写一个正则表达式来标记以下字符串,

turn on 931,331 through 939,812
turn off 756,53 through 923,339
toggle 756,965 through 812,992

这是我的正则表达式,

Pattern pattern = Pattern.compile("[(turn on)|(turn off)|(toggle)] (\\d+),(\\d+) through (\\d+),(\\d+)");


for (String word : lines) {
Matcher m = pattern.matcher(word);
if (m.find()) {
System.out.println(m.group(0));
}
}

返回以下结果,

n 931,331 through 939,812
f 756,53 through 923,339
e 756,965 through 812,992

我的正则表达式组 1 到 4 返回我要匹配的 4 个数字,但由于某种原因,我无法将字符串“打开”或“关闭”或“切换”捕获到组 1 中,然后将他们自己组中的数字?

如果我使用以下正则表达式,

Pattern pattern = Pattern.compile("(turn on) (\\d+),(\\d+) through (\\d+),(\\d+)");

我可以捕获第 1 组中的“打开”,然后捕获其自己组中的每个数字。但随后我必须为“关闭”和“切换”构建另一个模式对象

我错了什么?

我也尝试过这种变体,

Pattern pattern = Pattern.compile("([turn on|turn off|toggle]) (\\d+),(\\d+) through (\\d+),(\\d+)");

最佳答案

您正在尝试使用 character set对捕获组进行分组(这将匹配括号之间的一个字符),这就是为什么在您的情况下只匹配一个字符。

如果您想要对捕获组进行分组,则可以使用非捕获组:

(?:(turn on)|(turn off)|(toggle)) (\\d+),(\\d+) through (\\d+),(\\d+)

但这不是必需的,因为您可以使用以下内容:

(turn on|turn off|toggle) (\\d+),(\\d+) through (\\d+),(\\d+)

关于Java 正则表达式匹配不匹配或的单词集,其余工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34843023/

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