Как сопоставить строку цифр, где конкретная цифра, если повторяется, и если вместе, может повторяться только m раз? - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть строка из 10 цифр, и условием является любое число, если оно повторяется последовательно и может повторяться только 4 раза, в противном случае нет ограничений на повторы

Пример:

1234567890 "match"
1213141516 "match"
1111234567 "match"
1233333456 "not match"

Как я могу сделать это с помощью регулярных выражений?

Ответы [ 3 ]

2 голосов
/ 12 апреля 2019

Вы можете использовать следующее регулярное выражение и возвращать 'match' или 'not_match' в зависимости от того, была найдена группа захвата или нет.

\1 будет указывать, что вы хотите {4} повторений первой группы захвата:

def valid_string(s, lim=10):
    m = re.search(r'(\d)\1{4}', s)
    return 'match' if not m and len(s)==lim else 'not_match'

valid_string('1234567890')
# 'match'

valid_string('1111234567')
# 'match'

valid_string('1233333456')
# 'not_match'
0 голосов
/ 12 апреля 2019

^(?!\d*(\d)\1{4})\d{10}$

Как видно здесь https://regex101.com/r/LX8zQs/1

0 голосов
/ 12 апреля 2019

Есть ли конкретная причина, по которой вам нужно делать это с RegEx, а не с простым циклом, содержащим:

/* Code to get current and previous char */
if (currentChar == previousChar) { numRepeats += 1; } else { numRepeats = 0; }
if (numRepeats > 4) { return false }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...