Чередование символов и вложенных скобок в (e) grep - PullRequest
2 голосов
/ 12 августа 2010

Я ищу регулярное выражение, которое находит все слова в списке, у которых нет символов рядом друг с другом, которые являются одинаковыми.(это упражнение)

Итак, abcdef напечатано, но aabcdef нет.

Я пробовал оба

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

и egrep "^ ((.) [^ \ 2]) * $ "слова, но, не зная, какой из них будет правильным, они не работают.

Я знаю, что могу пойти egrep -v "(.)\1", но я хочуиспользуйте регулярные выражения в структуре OR с некоторыми другими, так что это невозможно.

Для заинтересованных лиц полное упражнение состоит в том, чтобы найти все слова, которые имеют ровно две пары символов, поэтому aacbb и aabbdсовпадают, но abcd и aabbcc нет.

Спасибо,

Ответы [ 2 ]

0 голосов
/ 12 августа 2010

egrep устарела. используйте grep -E

например

echo "aacbb" | grep -E "(\w)\1"
0 голосов
/ 12 августа 2010

Требуется ли 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

Я полагаю, что версия двух групп может быть получена путем объединения трех из этих выражений с теми, которые делают совпадение пар.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...