Python regex Как проверить с условием NOT для обратной ссылки на группу ИЛИ игнорировать элемент группы в обратной ссылке - PullRequest
1 голос
/ 01 мая 2020

Проблема: - Номер действителен, если альтернативные номера отличаются. В случае, если альтернативные номера одинаковы, а промежуточный номер также одинаков, они снова действительны

example:-
123456 :- This number is valid as we don't have any alternate number as same, all are different
110100:- This number is invalid as in  010  alternate numbers are same and in-between is different
110000 :- this number is valid as in 000 alternate number though are same in-between is also same

Что я пробовал

import re
st="1101010"
#st="110000"
re.findall(r"(\d)[^\1]&[\d]\1", st)

Я пытался не указывать группу элемент путем обратной ссылки и использования условия AND, но это не работает.

1 Ответ

1 голос
/ 01 мая 2020

Вы можете использовать регулярное выражение

r"(\d)(?!\1)\d\1"

Строки, соответствующие этому регулярному выражению, содержат строку aba, где a - любой символ, а b - любой символ, отличный от a.

Regex demo

Python demo

Python Движок regex выполняет следующие операции.

(\d)    # match a digit and save to cap grp 1
(?!\1)  # the next char cannot be the content of cap grp 1
\d      # match a digit
\1      # match the content of cap grp 1
...