Я знаю, что существуют разные способы сделать это, но я просто хочу знать, почему мое регулярное выражение не работает. На самом деле это не то, что мне нужно сделать, я просто хотел посмотреть, могу ли я сделать это с помощью регулярного выражения, и я понятия не имею, почему мой код не работает.Попытка найти неперекрывающиеся подстроки, содержащие определенную подпоследовательность
Учитывая строку S, я хочу найти все неперекрывающиеся подстроки, которые содержат подпоследовательность Q, которая подчиняется определенным правилам. Предположим теперь, что я ищу подпоследовательность "abc"
. Я хочу, чтобы соответствовать подстроке S, который содержит 'a'
с последующим в некоторой точке по 'b'
с последующей в некоторой точке по 'c'
с ограничением, что ни один 'a'
не следует 'a'
, а не 'a'
или 'b'
'b'
не вытекает. Регулярное выражение, я использую это следующим образом (в Python):
regex = re.compile(r'a[^a]*?b[^ab]*?c')
match = re.finditer(regex, string)
for m in match:
print m.group(0)
Для меня это ломается и звучит следующим образом:
a[^a]*?b
: 'a'
следовал наименьшую # символов не включая 'a'
и заканчивающийся с 'b'
[^ab]*?c
: самый маленький # символов не включая 'a'
или 'b'
и заканчивающийся с 'c'
Поэтому, ставя все это вместе, я предположил, что я буду сопоставлять неперекрывающиеся подстроки S, содержащие подпоследовательность «abc», которая подчиняется моим правилам исключения.
Этот работает отлично что-то вроде:
S = "aqwertybwertcaabcc"
, что дает мне "aqwertybwertc"
и "abc"
,
но не удается работать S = "abbc"
, как он совпадает с "abbc"
.
Значит, вы не хотите, чтобы он соответствовал '' abbc'''? Но это соответствует вашим требованиям. – jwodder
Как я указал, что '' b'' не может следовать '' a'' или '' b''? –
Вы сказали, что 'a' сопровождается * в какой-то точке * буквой' b', за которой не следуют другие 'b', а в' 'abbc'' второй' b' является 'b' после' a', за которым не следует другое 'b'. В ваших спецификациях никогда не запрещалось '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''. – jwodder