我将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");
}
}
问候。
答案 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)+(\+).*