Java正则表达式不起作用,在线网站上使用相同的模式
问题 我试图从输入中提取单词Java正则表达式不起作用,在线网站上使用相同的模式,java,regex,Java,Regex,问题 我试图从输入中提取单词 Pacific Gas & Electric (PG&E), San Diego Gas & Electric (SDG&E), Salt River Project (SRP), Southern California Edison (SCE) 我试着在网上这样做,我的模式是\w\s?&\s?\ 但是当我编写Java程序时,它并没有找到它 private static void findWords() { final Pa
Pacific Gas & Electric (PG&E), San Diego Gas & Electric (SDG&E), Salt River Project (SRP), Southern California Edison (SCE)
我试着在网上这样做,我的模式是\w\s?&\s?\
但是当我编写Java程序时,它并没有找到它
private static void findWords() {
final Pattern PATTERN = Pattern.compile("(\\w\\s?&?\\s?\\(?\\)?)");
final String INPUT = "Pacific Gas & Electric (PG&E), San Diego Gas & Electric (SDG&E), Salt River Project (SRP), Southern California Edison (SCE)";
final Matcher matcher = PATTERN.matcher(INPUT);
System.out.println(matcher.matches());
}
它返回False
问题:
为什么会有错配,好像我对这里的理解很差
我怎样才能把这些词作为一个组说出来,意思是太平洋煤气电气公司的PG&E作为match Group 1等等
Matchermatches仅在整个字符串与正则表达式匹配时返回true
正如您在在线matcher中所看到的,正则表达式匹配的不是整个字符串,而是单个字符,有时甚至更多。你的正则表达式匹配P,a,c,i等等。您应该首先修复正则表达式,然后使用Matcherfind和Matchergroup来获取匹配组。Matchermatches仅在整个字符串与正则表达式匹配时返回true
正如您在在线matcher中所看到的,正则表达式匹配的不是整个字符串,而是单个字符,有时甚至更多。你的正则表达式匹配P,a,c,i等等。您应该首先修复正则表达式,然后使用Matcherfind和Matchergroup来获取匹配组。如果您使用Matcherfind方法而不是Matchermatches方法,则结果将为true。原因是,matches方法在末尾假定隐式锚点-克拉和美元。所以它会将整个字符串与正则表达式匹配。如果不是这样,它将返回false。如果您使用Matcherfind方法而不是Matchermatches方法,那么结果将为true。原因是,matches方法在末尾假定隐式锚点-克拉和美元。所以它会将整个字符串与正则表达式匹配。如果不是这样,它将返回false。您可能需要重新评估从rubular获得的输出 从 matches方法尝试根据模式匹配整个输入序列 rubular中的内容会找到一组匹配项,因为几乎每个角色都是匹配项 在你的红宝石结果中没有任何地方会告诉你整个字符串是匹配的。我会重新评估你在那里看到的结果 匹配单词的正则表达式非常简单 你可以用
\b\S*\b
或者干脆
\S*
根据您的需要您可能需要重新评估从rubular获得的输出 从 matches方法尝试根据模式匹配整个输入序列 rubular中的内容会找到一组匹配项,因为几乎每个角色都是匹配项 在你的红宝石结果中没有任何地方会告诉你整个字符串是匹配的。我会重新评估你在那里看到的结果 匹配单词的正则表达式非常简单 你可以用
\b\S*\b
或者干脆
\S*
根据您的需要如果您想从字符串中提取匹配项,您可以尝试以下操作:
final String INPUT = "Pacific Gas & Electric (PG&E), San Diego Gas & Electric (SDG&E), Salt River Project (SRP), Southern California Edison (SCE)";
Pattern pattern = Pattern.compile("(.*?\\([^)]+\\))(?:,\\s*|$)");
Matcher m = pattern.matcher(INPUT);
while (m.find()) {
System.out.println(m.group(1));
}
或者,您也可以执行INPUT.split\\s*,\\s*;如果名称中不包含任何逗号
现在来问一下为什么会出现不匹配,我的理解似乎很差:因为String类的匹配在整个字符串上执行匹配。如果您想从字符串中获得匹配,这里是您可以尝试的:
final String INPUT = "Pacific Gas & Electric (PG&E), San Diego Gas & Electric (SDG&E), Salt River Project (SRP), Southern California Edison (SCE)";
Pattern pattern = Pattern.compile("(.*?\\([^)]+\\))(?:,\\s*|$)");
Matcher m = pattern.matcher(INPUT);
while (m.find()) {
System.out.println(m.group(1));
}
或者,您也可以执行INPUT.split\\s*,\\s*;如果名称中不包含任何逗号
现在来问一下为什么会出现不匹配,我的理解似乎很差:因为字符串类的匹配在整个字符串上执行匹配。FYI:函数之间的差异,并在中的特定于味道的信息下列出。FYI:函数之间的差异,和列在中的风味特定信息下。