Анализ XML в Python с регулярным выражением
Я пытаюсь использовать regex для анализа файла XML
(в моем случае это кажется самым простым способом).
Например, строка может быть:
line='<City_State>PLAINSBORO, NJ 08536-1906</City_State>'
Чтобы получить доступ к тексту для тега City_State, я использую:
attr = re.match('>.*<', line)
но ничего не возвращается.
Может кто-нибудь указать, что я делаю неправильно?
Ответы
Ответ 1
Обычно вы не хотите использовать re.match
. Цитата из документов:
Если вы хотите найти совпадение в любом месте строки, вместо search() (см. также search() vs. match()).
Примечание:
>>> print re.match('>.*<', line)
None
>>> print re.search('>.*<', line)
<_sre.SRE_Match object at 0x10f666238>
>>> print re.search('>.*<', line).group(0)
>PLAINSBORO, NJ 08536-1906<
Кроме того, зачем анализировать XML с регулярным выражением, когда вы можете использовать что-то вроде BeautifulSoup
:).
>>> from bs4 import BeautifulSoup as BS
>>> line='<City_State>PLAINSBORO, NJ 08536-1906</City_State>'
>>> soup = BS(line)
>>> print soup.find('city_state').text
PLAINSBORO, NJ 08536-1906
Ответ 2
Пожалуйста, просто используйте XML-парсер, например ElementTree
>>> from xml.etree import ElementTree as ET
>>> line='<City_State>PLAINSBORO, NJ 08536-1906</City_State>'
>>> ET.fromstring(line).text
'PLAINSBORO, NJ 08536-1906'
Ответ 3
re.match возвращает совпадение, только если шаблон соответствует всей строке. Чтобы найти подстроки, соответствующие шаблону, используйте re.search.
И да, это простой способ разобрать XML, но я настоятельно рекомендую вам использовать библиотеку, специально разработанную для этой задачи.