我正在使用Java正则表达式,我需要匹配两个单词,但在这些单词之间可以出现一个空格或另一个单词,例如“动力能源”,“能源动力”,“能源动力”。我必须获得“动力能量”的所有变化。有可能吗?
此外,我需要有类似“pow * ener *”的东西来捕捉所有开始con pow和ener的双字。例如,“能量的力量”。
答案 0 :(得分:3)
在模式中的两个单词之间使用简单的wild card:
"power(.*?)energy"
或"power.*energy"
答案 1 :(得分:0)
试试这个:
/(?=power)(?=energy)/i
答案 2 :(得分:0)
以下
Pattern pattern = Pattern.compile("(\\bpow\\w+)(.*?)(\\bener\\w+)");
Matcher matcher = pattern.matcher("Test powers test energies test.");
if(matcher.find()) {
System.out.println(matcher.group());
}
打印powers test energies
。它应该与您发布的其他变体一起使用。如果单词以pow
开头,显然它会给你误报,但这就是你在问题中想要的。
答案 3 :(得分:0)
你可以尝试这种模式:
\\bpowers?\\s+(?:\\w+\\s+){0,2}energ(?:y|ies)\\b
注意:如果你想要,你可以在“power”和“energy”之间允许两个以上的单词增加(或减少)大括号内的量词值。
\\b
是一个单词边界,以避免在单词之后或之前有其他字母(或数字或下划线)。
答案 4 :(得分:0)
如果你需要捕捉“权力”,“能量”和群组中的变化,你可以使用:
(pow\S+\b).*(ener\S+\b)
在java中:
Pattern pattern = Pattern.compile("(pow\\S+\\b).*(ener\\S+\\b)");
Matcher matcher = pattern.matcher("powers of energies");
if(matcher.find()) {
int count = matcher.groupCount();
for(int i=1;i<=count;i++){
System.out.println(matcher.group(i));
}