Я написал регулярное выражение внутри скрипта python для анализа XML-файлов, но, к сожалению, оно не работает

#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 "([^"]*)">
 

Демонстрация регулярных выражений