#python #regex #python-2.7 #python-2.x
Вопрос:
Я написал сценарий для сбора информации из XML — файла. Внутри определены СУЩНОСТИ, и мне нужно регулярное выражение, чтобы извлечь из него значение.
<!ENTITY ABC "123">
<!ENTITY BCD "234">
<!ENTITY CDE "345">
Сначала я открываю xml-файл и сохраняю содержимое внутри переменной.
xml = open("file.xml", "r")
lines = xml.readlines()
Затем я получил петлю for:
result = "ABC"
var_search_result_list = []
var_searcher = "ENTITYs" result '.*"[^"]*">'
for line in lines:
var_search_result = re.match(var_searcher, line)
if var_search_result != None:
var_search_result_list = list(var_search_result.groups())
print(var_search_result_list)
Я действительно хочу, чтобы значение 123 было в моем списке var_search_result_list. Вместо этого я получаю пустой список каждый раз, когда использую это. У кого-нибудь есть решение?
Заранее спасибо — Токи
Комментарии:
1. ты об этом знаешь
xmltodict
?2. не могу использовать какие-либо модули сообщества или python 3.x в этом проекте
3. поделитесь xml и объясните, какие атрибуты / элементы вы ищете.
Ответ №1:
В коде есть несколько проблем.
- Вы используете
re.match
то, что должно совпадать с самого начала строки. Ваш шаблонENTITYsABC.*"([^"]*)">
не совпадает с началом строк данного примера. - Если вы хотите добавить только 123, вам нужно использовать группу захвата и добавить ее
var_search_result.group(1)
в список результатов с помощью добавления
Например:
import re
xml = open("file.xml", "r")
lines = xml.readlines()
result = "ABC"
var_search_result_list = []
var_searcher = "ENTITYs" result '.*"([^"]*)">'
print(var_searcher)
for line in lines:
var_search_result = re.search(var_searcher, line)
if var_search_result:
var_search_result_list.append(var_search_result.group(1))
print(var_search_result_list)
Выход
['123']
Немного более точная схема могла бы быть
<!ENTITYsABCs "([^"]*)">