Java正则表达式:匹配多个单词边界
我想在课文中匹配几个单词。有以下几点:Java正则表达式:匹配多个单词边界,java,regex,Java,Regex,我想在课文中匹配几个单词。有以下几点: if ( Pattern.matches(".*\\b" + placeSub.toLowerCase() + "\\b" + placeSup.toLowerCase() + "\\b.*", sourceText.toLowerCase()) ) { System.out.println( String.format("Matched %s on %s", placeSub, placeSup) ); } 变量placeSub
if ( Pattern.matches(".*\\b" + placeSub.toLowerCase() + "\\b" + placeSup.toLowerCase() + "\\b.*", sourceText.toLowerCase()) ) {
System.out.println( String.format("Matched %s on %s", placeSub, placeSup) );
}
变量placeSub
,placeSup
和sourceText
是动态的(运行时)
上面的代码不起作用(不匹配)。但是,以下匹配项:
if ( Pattern.matches(".*\\b" + placeSub.toLowerCase() + "\\s" + placeSup.toLowerCase() + "\\b.*", sourceText.toLowerCase()) ) {
System.out.println( String.format("Matched %s on %s", placeSub, placeSup) );
}
为什么文本能够匹配\\s
而不能匹配\\b
输入示例:
南部
苏丹
在南苏丹北部统一州的激战中,数万人逃离了战场
您应该实际使用:
Pattern.matches(
".*?\\b" + placeSub.toLowerCase() + "\\b\\W+\\b" + placeSup.toLowerCase() + "\\b.*",
sourceText.toLowerCase())
这将转化为:
/.*?\bsouth\b\W+\bsudan\b.*/i
有了
placeSub
=South
和placeSup
=Sudan
,两者之间不可能只有一个\b
。但是,在示例中有一个空格,这就是为什么\s
匹配。为什么需要*
在那里?我应该如何匹配由未知字符分隔的两个单词?南苏丹就是一个例子。如果它们必须是单独的单词,@MugomaJ.Okomba:/word\b.*\bword/
*
匹配之前和之后的任何内容。我本可以使用^
&$
,但我更愿意将表达式保持打开状态。看起来我需要的是\\b\\W+\\b
。谢谢@anubhava