0

Twitter API から取得したファイルから入力テキストを解析しようとしています。ファイルはストレート テキストであり、この場合、実際には 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"

ここに私が働こうとした2つがありますが、私はそれらにいくつかの問題を抱えています:

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

最初のものでは、必要なセクションに続く「作成済み」までのすべてを取得できます。2番目のものも同様に機能しますが、テキストに「:」が含まれている場合、情報の最後まで進みません

正しい方向に私を向けることができる正規表現の経験がある人はいますか?

4

3 に答える 3

1

Twitter API を使用している場合は、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.
于 2011-11-03T03:49:18.947 に答える
0

Jsonは十分に単純な形式であるため、些細なことをしようとしている場合でもパーサーは必ずしも必要ではありません。次の行を考えてみましょう。

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

これがあなたがやりたいことをする2つの方法です。

正規表現あり:

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

evalを使用する場合(jsonは非常にpythonic形式です):

>>> d = eval(line)
>>> d['text']
'blah blah bar'
于 2011-11-04T11:09:38.920 に答える
0

JSON を解析するには、 simplejsonを使用します。

このチュートリアルに従ってください: http://blogs.openshine.com/pvieytes/2011/05/18/parsing-twitter-user-timeline-with-python/

于 2011-11-03T03:51:03.060 に答える