RegEx用于查找单词之间只有一个空格的单词

时间:2010-08-11 09:17:28

标签: regex perl grep

我需要RegEx问题的帮助:

我想找到两个已知单词(例如“foo”和“bar”)的出现,它们之间只有一个空格,而不是它们之间的任何空格。

在我必须grep的文本中,两个单词之间可能有空格,制表符,CR,LF或它们的任意组合。

在RegEx中: 我需要一个匹配"foo[ \t\n\r]+bar"但不匹配"foo bar"的正则表达式。

到目前为止我尝试的所有内容要么错过了一些组合,要么也匹配了唯一一个不匹配的单一空格案例。

提前感谢任何解决方案。

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

3 个答案:

答案 0 :(得分:4)

您还可以使用否定前瞻:

foo(?! \b)\s+bar

如果不支持预测,您可以明确地编写它:

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

表达式[^\S ]包含双重否定,并且可能不会立即显示它是如何工作的。如果你理解它的逻辑,它意味着任何与空间分开的空格。

答案 1 :(得分:1)

你可以使用(假设是ERE,即grep -E

foo[:space:]{2,}bar

语法x{min,}表示模式x必须至少出现min次。


如果除了“正常一个空格字符”之外,您的意思是除了0x20空格字符外,您需要进行更改:

foo([\t\n\r]|[ \t\n\r]{2,})bar

答案 2 :(得分:0)

使用[:space:] {2,}

{2,}表示2个或更多