java 中的正则表达式不起作用

Regular expression in java not working

我将 excel 文件转换为 CSV,然后再转换为字符串。

问题是正则表达式不能正常工作

我要检测这种文字:

MYW Pkg, MYW Pkg + Quick Service Dining, MYW Pkg + Dining, MYW Pkg + Deluxe Dining,

Room + Tickets + Quick Service Dining

我有一个字符串数组。 所以我需要知道一个模式,我尝试了这个但它没有检测到它:

Pattern.compile("([A-Z]{3})+(\s)+([A-Za-z]{3})+(\s)+(\+)");

我尝试匹配 "MYW Pkg +" 例如, 你知道为什么它不起作用吗?

更多代码:

chain 是数组,其值类似于 "MYW Pkg,"

Pattern patPackageDescription = Pattern.compile("([A-Z]{3})+(\s)+([A-Za-z])+(\s)+(\+)");
        for (int i = 0; i < chain.length; i++) {
            Matcher matPackageDescription = patPackageDescription
                    .matcher(chain[i]);

            if (matPackageDescription.matches()) {
                String space = String.format("%1$-" + 50 + "s",
                        chain[i].toString());
                a.append(space + "|\n");
            }
        }

此致。

matches() 方法尝试将整个字符串与模式匹配,要匹配字符串的一部分,您需要使用 find() 方法。

String str = "MYW Pkg, MYW Pkg + Quick Service Dining, MYW Pkg + Dining, MYW Pkg + Deluxe Dining,";
Pattern patPackageDescription = Pattern.compile("([A-Za-z]{3}\s)+\+");
Matcher matPackageDescription = patPackageDescription.matcher(str);

while (matPackageDescription.find()) {
    System.out.println(matPackageDescription.group());
}

输出:

MYW Pkg +
MYW Pkg +
MYW Pkg +

查看 以获得解释。

您的问题是您使用的 Matcher.matches() 需要完全匹配,如果您可以使用 find() 进行部分匹配或添加 .* 以匹配搜索字符串后的任何内容.

([A-Z]{3})+(\s)+([A-Za-z]{3})+(\s)+(\+).*

Debuggex Demo