代码之家  ›  专栏  ›  技术社区  ›  selfawaresoup

正则表达式,用于查找不只有一个空格的单词

  •  4
  • selfawaresoup  · 技术社区  · 15 年前

    在我需要grep的文本中,两个单词之间可能有空格、制表符、CRs、LFs或它们的任意组合。

    用正则表达式: "foo[ \t\n\r]+bar" 但不匹配 "foo bar" .

    到目前为止,我所尝试的一切要么错过了一些组合,要么也匹配了单个空格的情况,这是唯一一个不应该匹配。

    提前感谢您的解决方案。

    编辑:为了澄清,我在这里使用的是与Perl兼容的RegEx。

    3 回复  |  直到 15 年前
        1
  •  4
  •   Mark Byers    15 年前

    您也可以使用消极的前瞻:

    foo(?! \b)\s+bar
    

    如果不支持lookaheads,则可以显式编写它:

    foo(?:[^\S ]| \s)\s*bar
    

    [^\S ] 包括一个双负片,它的工作原理可能不是很明显。如果你计算出它的逻辑,它意味着除了空格之外的任何空格。

        2
  •  1
  •   kennytm    15 年前

    grep -E )

    foo[:space:]{2,}bar
    

    语法 x{min,} x 必须至少出现 min 次。


    foo([\t\n\r]|[ \t\n\r]{2,})bar
    
        3
  •  0
  •   explodus    15 年前

    使用[:空格:{2,}

    {2,}表示2个或更多