【问题标题】:Regex match two words正则表达式匹配两个单词
【发布时间】:2017-04-03 21:53:24
【问题描述】:

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

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

【问题讨论】:

    标签: java regex


    【解决方案1】:

    在模式中的两个单词之间使用简单的wild card

    "power(.*?)energy" 或只是"power.*energy"

    【讨论】:

      【解决方案2】:

      试试这个:

      /(?=power)(?=energy)/i
      

      【讨论】:

        【解决方案3】:

        以下

        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 开头,它会给您带来误报,但这似乎是您在问题中想要的。

        【讨论】:

          【解决方案4】:

          你可以试试这个模式:

          \\bpowers?\\s+(?:\\w+\\s+){0,2}energ(?:y|ies)\\b
          

          注意:如果您愿意,可以在“power”和“energy”之间允许两个以上的词增加(或减少)大括号内的量词值。

          \\b 是一个单词边界,以避免在单词之后或之前出现其他字母(或数字或下划线)。

          【讨论】:

            【解决方案5】:

            如果你需要捕捉单词“power”、“energy”和分组变化,你可以使用:

            (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

            【讨论】:

            • 谢谢,最后一个问题是 (pow\S+\b).*(ener\S+\b) 还匹配 pow 和 ener 之间的 2 o 多个单词。我只需要一个空格或几乎 1 个字。
            • 你可以试试:(pow\S+)\s{0,1}\w*\s{0,1}(ener\S+)。这将匹配 power energiespower of energies 但不匹配 power of my energies
            • 谢谢,它有效,但我有最后一个问题,在我正在处理的文档中,我试图将力量写成一行的最后一个词,把能量写成下一行的第一个词。在这种情况下,它不起作用。你有什么主意吗?谢谢大家
            • @user3004412 抱歉,我不明白这个...我建议您发布另一个问题,其中包含到目前为止的代码以及输入和预期输出示例
            • 我打算在示例页面中匹配我尝试将“power”写为该行的最后一个单词和“energy”写为下一行的第一个单词的单词,似乎包装不起作用
            猜你喜欢
            • 2011-10-15
            • 1970-01-01
            • 2010-11-15
            • 2012-01-06
            • 1970-01-01
            相关资源
            最近更新 更多