交替的字符和嵌套的括号(e)grep

时间:2010-08-12 10:15:20

标签: regex grep

我正在寻找一个正则表达式,它找到列表中没有彼此相邻的字符的所有单词都是相同的。 (这是一项练习)

因此打印abcdef,但aabcdef不是。

我试过了两次

egrep "^((.)[^\1])*$"

和     egrep“^((。)[^ \ 2])* $”字 但是,除了不确定哪一个是正确的,它们不起作用。

我知道我可以去egrep -v "(.)\1",但我想在OR结构中使用正则表达式和其他一些结构,所以这是不可能的。

对于有兴趣的人,完整的练习是找到所有具有两个字符对的单词,因此aacbbaabbd匹配,但abcdaabbcc是不

谢谢,

2 个答案:

答案 0 :(得分:0)

egrep是否需要?或者我们可以切换到更强大的东西,如perl,python等?

认为负面看待断言可以在这里起作用:

#!/usr/bin/env python

import re

test1 = "abcdef"
test2 = "aabcdef"
test3 = "abbcdef"

r = re.compile(r"^(?:(.)(?!\1))*$")

assert r.match(test1) is not None
assert r.match(test2) is None
assert r.match(test3) is None

我想这两个版本可以通过将其中三个表达式与匹配对的表达式组合而制作。

答案 1 :(得分:0)

egrep已被弃用。使用grep -E

例如

echo "aacbb" | grep -E "(\w)\1"