如何让我的正则表达式捕获冒号两侧的文本?

0 投票
3 回答
674 浏览
提问于 2025-04-17 05:32

我正在尝试从一个文件中解析一些输入文本,这些文本最初是从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'
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.

撰写回答