gpt4 book ai didi

Java正则表达式,捕获多个组

转载 作者:行者123 更新时间:2023-11-29 07:10:44 25 4
gpt4 key购买 nike

使用我在 SO 上找到的示例代码和我正在搜索的字符串,我试图捕获飞机类别及其座位组。输入文件的飞机配置形式为 J28W36Y156,表示 28 个 J(商务)舱座位、36 个 W(高级经济舱座位)和 156 个 Y(经济舱)座位。

我使用的Java代码如下:

    s = "J12W28Y156";
patternStr = "(\\w\\d+)+";
p = Pattern.compile(patternStr);
m = p.matcher(s);
if (m.find()) {
int count = m.groupCount();
System.out.println("group count is "+count);
for(int i=1;i<=count;i++){
System.out.println(m.group(i));
}
}

正则表达式似乎只捕获最后一个类(class)座位配置,即。 Y156。我如何让这个正则表达式捕获多个组中的所有类(class)/座位组合。这是否与我需要指定的“贪婪”匹配有关?我希望输出类似于数组,例如。

{J12, W28, Y156}

谢谢你们。

最佳答案

您的第一个错误是对 \w 的错误解释。这是 javadoc 所说的:

\w 一个单词字符:[a-zA-Z_0-9]

这意味着 \w 会捕获字母和数字。因此,在您的情况下,考虑到字母始终为大写,我将使用以下模式:

[A-Z]\d+

现在它将捕获第一个位置标记。所以你应该自己实现循环:

Pattern p = Pattern.compile("([A-Z]\\d+)");
Matcher m = p.matcher(str);
while (m.find()) {
String place = m.group(1);
// A12, W28 etc is here
}

关于Java正则表达式,捕获多个组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14089334/

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