如何让我的正则表达式捕获冒号两侧的文本?
我正在尝试从一个文件中解析一些输入文本,这些文本最初是从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"
我尝试过的两个方法如下,但我在使用它们时遇到了一些问题:
re.findall('"text":[^_]*',line)
re.findall('"text":[^:}]+',line)
第一个方法可以让我提取到“created”之前的所有内容,第二个方法也能部分工作,但当文本中包含“:”时,它就无法提取到信息的末尾。
有没有人对正则表达式有经验,可以给我一些建议?
3 个回答
0
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在Python中使用得很广泛):
>>> d = eval(line)
>>> d['text']
'blah blah bar'
0
使用 simplejson 来解析 JSON 数据。
可以参考这个教程: http://blogs.openshine.com/pvieytes/2011/05/18/parsing-twitter-user-timeline-with-python/
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.