Как я могу получить свой RegEx для захвата текста по обе стороны от двоеточия? - PullRequest
0 голосов
/ 03 ноября 2011

Я пытаюсь разобрать часть входного текста из файла, который первоначально был получен из API Twitter.Файл представляет собой простой текст, и в данном случае я не собираю JSON.Это фрагмент входного текста:

.....HootSuite</a>", "text": "For independent news reports on the crisis in #Japan, 
see @DemocracyNow News Archive: http://ow.ly/4ht9Q
#nuclear #Fukushima #rdran #japon", "created_at": "Sat Mar 19.....

В основном мне нужно взять это:

"text": "For independent news reports "on" the crisis in #Japan, see @DemocracyNow 
News Archive: http://ow.ly/4ht9Q #nuclear #Fukushima #rdran #japon"

Вот два, которые я пытался заставить работать, но у меня есть некоторыепроблемы с ними:

    re.findall('"text":[^_]*',line)
    re.findall('"text":[^:}]+',line)

Первый позволит мне собрать все до "созданного", следуя желаемому разделу.Второй тоже неплохо работает, но когда текст включает «:», он не идет до конца информации

У кого-нибудь есть опыт работы с RegEx, который может указать мне правильное направление?

Ответы [ 3 ]

1 голос
/ 03 ноября 2011

Если вы используете API Twitter, я полагаю, что он возвращает вам JSON. JSON поддерживает произвольное вложение, и регулярное выражение никогда не сможет правильно его проанализировать в каждом сценарии. Вы бы лучше обслужили с помощью парсера JSON. Поскольку YAML - это расширенный набор JSON, вы также можете использовать синтаксический анализатор YAML. Я бы посмотрел на PyYaml . (Это то, что я знаю. Вероятно, они тоже просто JSON-парсеры)

Тогда разбор будет так же прост, как:

import yaml
results = yaml.load(twitter_response)
print results["text"]  # This would contain the string you're interested in.
0 голосов
/ 04 ноября 2011

Json - достаточно простой формат, поэтому вам не всегда нужен анализатор, если вы пытаетесь сделать что-то тривиальное.Рассмотрим пример строки:

>>> line = """{ "text" : "blah blah foo", "other" : "blah blah bar" }"""

Вот два способа сделать то, что вы хотите.

С регулярным выражением:

>>> import re
>>> m = re.search('"text"\ *:\ *"([^"]*)',line)
>>> m.group()
'"text" : "blah blah bar'
>>> m.group(1)
'blah blah bar'

С eval (json очень питоническийформат):

>>> d = eval(line)
>>> d['text']
'blah blah bar'
0 голосов
/ 03 ноября 2011

Используйте simplejson для анализа JSON.

Следуйте этому руководству: http://blogs.openshine.com/pvieytes/2011/05/18/parsing-twitter-user-timeline-with-python/

...