Квази 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 -> Следующий элемент = новая строка -> создать новую запись и добавить...
Может быть, это помогает...