Регулярное выражение для проверки каждой подстроки

У меня был этот вопрос на экзамене в конце семестра, к сожалению, я не мог решить его и пробовал несколько дней, но не повезло.

Условие - для каждой подстроки длины 4 в строке длины n напишите RE, чтобы форсировать правило - должно быть ровно три единицы.

Мое решение вроде как (1+11+111+€)(0111)*(0+€).

Но это, очевидно, неправильно, строка 11011 также является допустимым решением.

Обновление - мое новое решение (1+11+111+€)(0111)*(0+01+011+€).

Обновление - оператор плюс на самом деле 'ИЛИ'

Обновление - € пустая строка

Обновление - длина строки не имеет требований. Строка длиной 5 будет иметь 2 подстроки длиной 4, первые 4 символа и последние 4 символа

3 ответа

Python 2

import re

# regular expression
# '^' in the start of the expression means from the very start of the string
# "[^1.]*" means match any character unless it is '1'
# '$' in the end of the expression means till the very end of the string
# Summary:
# from the start of the string till the end of it check if we have
# '1' exactly 3 times, 
# and before or after them you might find any type of characters
# and these characters must not be equal '1' ...
expression = '^[^1.]*1[^1.]*1[^1.]*1[^1.]*$'

# testing strings
tests = ["01110", "11100", "00111", "010101", "00100100111", "00100"]


prog = re.compile(expression)

for test in tests:
    print 'matched' if prog.match(test) else 'not matched'

Изменить: Рассмотрим следующее регулярное выражение, где относится к пустой строке и предполагая, что алфавит состоит только из {0,1, €}:

€ + (0111) * + (1110) * + (1101) * + (1011) *

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

(0?11)*

Чтобы завершить картину, мы также должны включить случай для n= 1, где допускается либо 0, либо 1 (я полагаю).

^[01]$|(0?11)*

Я использую традиционное регулярное выражение здесь, где [...] обозначает класс персонажа, | "или", скобки делают группировку, и * указывает ноль или более повторений (звезда Клини).

Другие вопросы по тегам