Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 16, 2011 15:09:24

Kravejs
От:
Зарегистрирован: 2008-07-27
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Почему при поиске происходит пропуск и как этого избежать?

Есть текст. Нужно найти последовательность, которая начинается определённым образом а заканчивается либо концом файла либо началом следующей последовательности.

Пример:

Мне нужно найти все что начинается на ‘a’, внутри ‘a’ не содержит и заканчивается либо концом строки либо началом другой последовательности.

a = "xcAbbAccAddAvvvAkk"
re.findall(r"(A[^A]*)(A|\Z)", a)
Эта конструкция находит только три слова: Abb, Add, Akk. И пропускает Acc и Avvv.
Почему? Как это обойти?

Конечно, здесь выражение можно переписать как: r"(A*)"

Но в моей задаче начало последовательности несколько сложнее. Это открывающая квадратная скобка в начале строки.

Пример:

a ="""
[aaa] bcd [ss] bbb
bbb ccc
[bbb] llkkk

[ccc] kkk [dddd [ddd] ddd]"""
Последовательность начинается с ^ и заканчивается \n\n | \Z или ^[

И нужно их вытащить и обработать.

Вот



Офлайн

#2 Апрель 16, 2011 15:27:28

Nik
От:
Зарегистрирован: 2010-01-10
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Почему при поиске происходит пропуск и как этого избежать?

>>> a = "xcAbbAccAddAvvvAkk"
>>> re.findall(r"(A[^A]*)", a)
['Abb', 'Acc', 'Add', 'Avvv', 'Akk']
>>> re.findall(r"(A[^A]*)(?=A|\Z)", a)
['Abb', 'Acc', 'Add', 'Avvv', 'Akk']
>>> a ="""
[aaa] bcd [ss] bbb
bbb ccc
[bbb] llkkk

[ccc] kkk [dddd [ddd] ddd]"""
>>> re.findall(r"(\[.*?)(?=\n|\Z|\[)", a)
['[aaa] bcd ', '[ss] bbb', '[bbb] llkkk', '[ccc] kkk ', '[dddd ', '[ddd] ddd]']



Офлайн

#3 Апрель 16, 2011 15:35:15

Kravejs
От:
Зарегистрирован: 2008-07-27
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Почему при поиске происходит пропуск и как этого избежать?

Спасибо!

Вот ключевая фраза в документации, которую я не понял:

(?=…)
Matches if … matches next, but doesn’t consume any of the string.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version