Квази XML извлечение текста между 2 начальными тегами

Я собрал некоторые данные из PDF. Он имеет данные, которые почти как XML, и выглядит примерно так"(1) Data-field-1 (3) Data-field-3 (5) Data-field-5; (1) Data-field-1 (2) Data-field-2 (3) Data-field-3 (5) Data-field-5; ; (2) Data-field-2 (3) Data-field-3 (5) Data-field-5 (6) Data-field-6;" так далее

Таким образом, для каждой записи поле данных начинается с (x). Обычно тогда запись заканчивается точкой с запятой (;), но в поле данных часто стоит точка с запятой, поэтому я не могу использовать ее в качестве разделителя. Единственный признак того, что новая запись помечена стартом, состоит в том, что целое число в начальном теге меньше предыдущих. Тэги от 1 до 6. Я хотел бы попробовать словарь словарей, чтобы он выглядел как JSON, например

{'Row1':{1 : 'Data-field-1', 3 : 'Data-field-3', 5 : 'Data-field-5'},'Row2': {1: 'Data-field-1', 2: 'Data-field-2', 3: 'Data-field-3' 5: 'Data-field-5'},Row3': { 2: 'Data-field-2' ,3: 'Data-field-3' ,5: 'Data-field-5',6: 'Data-field-6'},так далее

Попытка использовать регулярное выражение в Python, чтобы сделать это, это мой последний кусок кода для совпадения в матчах:

inner_dict={}
    test=filter(None, re.split(";", match))
    print test
    for i,x in enumerate(test):
        if i==0 :
            inner_dict[1]=x
        else:
            y=re.findall('\((\d)\)',x)[0]
            inner_dict[y]=re.findall('\(\d\)\s(.+)',x)[0]
    outer_dict[n]=inner_dict
    n+=1

но просто получаю ошибку трассировки (индекс списка вне диапазона) из-за лишних точек с запятой в полях данных. Есть идеи, как сделать это лучше?

1 ответ

Сначала я написал бы парсер и прочитал этот элемент необработанных данных для элемента, а затем решил бы, что делать с элементом:

(1) Поле данных-1 -> Первый элемент -> создать новую запись в dict и добавить...

(3) Поле данных-3 -> Следующий элемент -> добавить при вводе

(5) Поле данных-5; -> Следующий пункт -> добавить в запись

(1) Поле данных-1 -> Следующий элемент = новая строка -> создать новую запись и добавить...

Может быть, это помогает...

Другие вопросы по тегам