Регулярные выражения python со сложными символами

У меня проблема с регулярным выражением в коде Python. Я пытаюсь разобрать файл со следующей структурой:

------------
some complex text
abcd
more text
-----------

С несколькими коробками с одинаковым рисунком. Я хочу получить только те коробки, которые содержат строку abcd. Мне удалось найти все вхождения строки abcd, но я не могу получить весь текст между ---. Я пытался собрать игрушечную веревку, но не могу заставить ее работать. Код ниже:

import re
text = ('-----\nsajnpajnfpiajbpiabvpier abcd fgdspoj\n------' +
        '-----\nsajnpajnfpiajbpiabvpierfgdspoj\n------')
data = re.findall(r"---(.*?)abcd(.*?)---", text)

Любая помощь приветствуется РЕДАКТИРОВАТЬ: я изменил текстовый пример, чтобы сделать его более реалистичным.

будет работать -+[\s\S]+abcd[\s\S]+?-+?

Zinki 11.04.2018 12:41

ммм, это происходит в контексте небольшого теста, но он не изолирует конкретный подраздел, который я хочу, я изменю тест, чтобы сделать его более похожим на то, что я ищу

mmonti 11.04.2018 12:49

Спасибо, Виктор, я не знал этого веб-сайта, я посмотрю на него.

mmonti 11.04.2018 12:52

Также проверьте regex101.com/r/mWiE5D/5

Wiktor Stribiżew 11.04.2018 12:54
0
6
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не думаю, что вам нужно регулярное выражение, чтобы найти простую строку. Это может быть упрощение того, что вы ищете:

s="""
some complex text
abcd
more text
-----------
some complex text
aoecd
more text
-----------
some complex text
abcd
more text
"""
# split the strings and add only those that contain "abcd"
result = [d for d in s.split("-----------") if "abcd" in d]
for r in result:
    print(r)
# result:
# some complex text
# abcd
# more text
# 
# some complex text
# abcd
# more text

Как видите, мы разделяем строку, когда появляется "-----------", а затем оцениваем, содержится ли подстрока «abcd» в каждой из строк, и сохраняем строки, которые прошли это условие.

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

mmonti 11.04.2018 13:35

Не торопитесь. Важно то, что решение хорошо работает в вашей ситуации. ;)

silgon 11.04.2018 13:40

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