2010-01-28 7 views
1

Я только начал изучать Python, и у меня возникла небольшая проблема. Мне нужно разобрать текстовый файл, в частности, файл HTML (но это синтаксис настолько странный - divs после divs после divs, результат «Просмотр как HTML» Google для определенного PDF-файла, похоже, не может извлечь из текст, потому что он имеет беспорядочную таблицу в m $ word).Разбор целых чисел в списке

Во всяком случае, я выбрал довольно низкоуровневый подход, потому что мне просто нужны данные как можно скорее, и поскольку я начинаю изучать Python, я решил, что изучение основ поможет мне тоже.

У меня все сделано, за исключением небольшой части, в которой мне нужно получить набор целых чисел из набора div. Вот пример:

<div style="position:absolute;top:522;left:1020"><nobr>*88</nobr></div> 

Теперь цифры я хочу, чтобы получить все те, внутри <nobr></nobr> (в этом случае, «588») и, так как это довольно грязный файл, я должен убедиться, что я получение правильное. Для этого этому номеру внутри <nobr></nobr> должен предшествовать "left:1020", "left:1024" или "left:1028". Это из-за автоматического преобразования, и лучшим выбором было бы получить все число, которому предшествует left:102[0-], на мой взгляд.

Для этого я пытался использовать:

for o in re.finditer('left:102[0-9]"><nobr>(.*?)</nobr></div>', words[index]) 
    out = o.group(1) 

Но до сих пор нет такой удачи ... Как не могу я получить эти цифры?

Спасибо заранее, J.

+1

Обязательно: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – kennytm

+0

Roger wilco! Еще раз спасибо –

+0

Я просто проверяю, но в строке ниже данных, которые вы перевариваете, у вас есть '(в этом случае '588')', но в строке данных между '' '' '88'. Я бы отредактировал и исправил его, но я не знаю, какая из них является правильной. – deadstump

ответ

1

Не использовать регулярные выражения для разбора HTML. BeautifulSoup сделает легкую работу.

Что касается конкретной проблемы, может оказаться, что вам не хватает двоеточие в конце первой строки:

for o in re.finditer('left:102[0-9]"><nobr>(.*?)</nobr></div>', words[index]): 
    out = o.group(1) 

Если это не проблема, пожалуйста, напишите об ошибке вы получаете, на то, что вы ожидаете от вывода.

+0

Да, я слышал об этом, но я не был уверен, что ему удастся получить все эти странные div, поэтому подход на низком уровне –

+0

@Hal: BeautifulSoup может находить теги на основе атрибутов, и он может даже принимать регулярное выражение как аргументы для поиска, если вам это нужно. –

+0

Прохладный, не знал, что это так мощно. Во всяком случае, я практически закончил сценарий, все, чего не хватает, это получение этих целых чисел. Я думаю, я мог бы просто выполнить 10 поисков, но это было бы просто глупо, и я хотел бы узнать, как можно использовать регулярное выражение для этой строки. –

Смежные вопросы