Предположим, что у меня есть следующая строка:
mystr = """
<p>Some text and another text. </p> ![image_file_1][image_desc_1] some other text.
<p>some text</p>
![image_file_2][image_desc_2] and image: ![image_file_3][image_desc_3]
test case 1: ![dont_match_1]
test case 2: [dont_match_2][dont_match_3]
finally: ![image_file_4][image_desc_4]
"""
Я могу получить image_file_X
, используя следующий код:
import re
re.findall('(?<=!\[)[^]]+(?=\]\[.*?\])', mystr)
Я хочу захватить image_desc_X
, но следующее не работает:
re.findall('(?!\[.*?\]\[)[^]]+(?=\])', mystr)
Какие-либо предложения? Если бы я мог получить и image_file
, и image_desc
, используя одну команду, это было бы еще лучше.
2 ответа
Используйте следующий подход:
result = re.findall(r'!\[([^]]+)\]\[([^]]+)\]', mystr)
print(result)
Выход:
[('image_file_1', 'image_desc_1'), ('image_file_2', 'image_desc_2'), ('image_file_3', 'image_desc_3'), ('image_file_4', 'image_desc_4')]
Я думаю, вы можете использовать:
for match in re.finditer(r"!\[(.*?)\]\[(.*?)]", mystr):
print match.group(1)
print match.group(2)
Выход:
image_file_1
image_desc_1
image_file_2
image_desc_2
image_file_3
image_desc_3
image_file_4
image_desc_4
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.