java中的正则表达式无效

时间:2016-07-19 19:46:13

标签: java regex formatter

我将excel文件转换为CSV,将其转换为String。

问题是正则表达式无法正常工作

我想检测这种文字:

  

MYW Pkg,MYW Pkg +快速服务用餐,MYW Pkg + Dining,MYW Pkg +   豪华餐饮,

     

房间+门票+快餐服务

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

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");
            }
        }

问候。

2 个答案:

答案 0 :(得分:2)

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 +

查看here以获得解释。

答案 1 :(得分:1)

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

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

Regular expression visualization

Debuggex Demo