我需要RegEx问题的帮助:
我想找到两个已知单词(例如“foo”和“bar”)的出现,它们之间只有一个空格,而不是它们之间的任何空格。
在我必须grep的文本中,两个单词之间可能有空格,制表符,CR,LF或它们的任意组合。
在RegEx中:
我需要一个匹配"foo[ \t\n\r]+bar"
但不匹配"foo bar"
的正则表达式。
到目前为止我尝试的所有内容要么错过了一些组合,要么也匹配了唯一一个不匹配的单一空格案例。
提前感谢任何解决方案。
编辑:为了澄清,我在这里使用Perl兼容的RegEx。
答案 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个或更多