Синтаксический анализ XML с использованием регулярных выражений не является хорошей идеей, поскольку данные XML могут содержать вложенные структуры, приводящие к неожиданным результатам при синтаксическом анализе с использованием регулярных выражений.
Хотя для простых случаев можно выполнить быструю и грязную работу, но вв долгосрочной перспективе вы должны пойти на XML-парсер.Только для вашего случая вы можете использовать это регулярное выражение,
(?s)<keyword:ROW.*?<\/keyword:ROW>
Чтобы найти все вхождения вашего тега <keyword:ROW
Объяснение:
(?s)
-> Включает.чтобы соответствовать символам новой строки, которые не по умолчанию <keyword:ROW
-> Соответствует вашему намеченному ключевому слову .*?
-> Соответствует любому символу после этого без жадности и останавливается непосредственно перед <\/keyword:ROW>
<\/keyword:ROW>
-> Соответствует конечному тегу и прекращает захват текста
Вот необходимый вам код Python,
import re
s = """
<?xml version="1.0" encoding="UTF-8"?>
<.... some xml sections...>
<keyword:ROW field1="value1">
<field2>=value2</field3>
<field3>=value3</field3>
</keyword:ROW>
<keyword:ROW field4="value4">
<field4>=value4</field4>
<field4>=value4</field4>
</keyword:ROW>
"""
arr = re.findall(r'(?s)<keyword:ROW.*?<\/keyword:ROW>', s)
print(arr)
Какойдает следующий вывод, который в основном состоит из двух ваших тегов, присутствующих в вашем образце xml.
['<keyword:ROW field1="value1">\n<field2>=value2</field3>\n<field3>=value3</field3>\n</keyword:ROW>', '<keyword:ROW field4="value4">\n<field4>=value4</field4>\n<field4>=value4</field4>\n</keyword:ROW>']
Дайте мне знать, если вам нужно что-нибудь объяснить здесь.