Нахождение строки между символом

244 просмотра
0
0 Комментариев

import re
comp = re.compile(r'¬(.*?)¬')
m = comp.findall('¬AG÷0¬BA÷0¬BB÷0¬')
print(m)

Получаю [‘AG÷0’, ‘BB÷0’]

Мне нужно [‘AG÷0’, ‘BA÷0’, ‘BB÷0’]

Что делаю не так?


Добавить комментарий

2 Answers

Python Опубликовано 12.12.2018
0

Что делаю не так?

Вы используете регулярные выражения для этой задачи )

Можно сделать намного проще:

s = '¬AG÷0¬BA÷0¬BB÷0¬'
print(s.split('¬'))

Вывод:

['', 'AG÷0', 'BA÷0', 'BB÷0', '']

Можно удалить первый и последний элементы:

print(s.split('¬')[1:-1])  # Вывод: ['AG÷0', 'BA÷0', 'BB÷0']

Добавить комментарий
0

Дело в том, что регулярные выражения ищут в строке последовательно, с учётом всех символов, а не только запомненных. То есть, когда ваша регулярка находит первое совпадение:

¬AG÷0¬

Она запоминает выражение из скобок:

AG÷0

И отбрасывает всю совпавшую подстроку (она же её уже проверила), оставляя для дальнейшего поиска следующую подстроку:

BA÷0¬BB÷0¬

В которой находит единственное точное совпадение:

¬BB÷0¬

И сохраняет:

BB÷0

Работающее регулярное выражение, для вашего случая, выглядит так:

comp = re.compile(r'¬([^¬]*)')

Но @insolor прав в том, что для вашей задачи регулярка — слишком сложное решение.

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up