正则表达式匹配两个单词

时间:2013-11-18 14:33:36

标签: java regex

我正在使用Java正则表达式,我需要匹配两个单词,但在这些单词之间可以出现一个空格或另一个单词,例如“动力能源”,“能源动力”,“能源动力”。我必须获得“动力能量”的所有变化。有可能吗?

此外,我需要有类似“pow * ener *”的东西来捕捉所有开始con pow和ener的双字。例如,“能量的力量”。

5 个答案:

答案 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));
    }

请参阅http://ideone.com/eNY3br