从正则表达式解析更好的方法?

时间:2014-10-28 22:33:54

标签: python regex

我正在执行以下操作来获取movieID:

>>> x.split('content')
['movieID" ', '="770672122">']
>>> [item for item in x.split('content')[1] if item.isdigit()]
['7', '7', '0', '6', '7', '2', '1', '2', '2']
>>> ''.join([item for item in x.split('content')[1] if item.isdigit()])
'770672122'

这样做会有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

不使用正则表达式,你可以用双引号拆分并取下一个最后一个字段。

u="""movieID" content="7706">"""
u.split('"')[-2]  # returns: '7706'

如果您还不了解正则表达式,这个技巧肯定是最具可读性的。

你的字符串有点奇怪,因为有3个双引号。我假设它来自一个HTML文件,你只显示一个小的子字符串。在这种情况下,您可以使用regular expression(例如:

)使代码更加健壮
import re
s = re.search('(\d+)', u)  # looks for multiple consecutive digits
s.groups()  # returns: ('7706',)

您可以使用BeautifulSoup之类的DOM解析器使其更加强大(但您需要阅读更多内容)。

答案 1 :(得分:1)

我认为x看起来像这样:

x = 'movieID content="770672122">'

正则表达式绝对是提取内容的一种方式。例如:

>>> re.search(r'content="(\d+)', x).group(1)
'770672122'

以上提取字符串content="后面的一个或多个连续数字。

答案 2 :(得分:1)

如果您的字符串如下所示,您似乎可以执行以下操作:

>>> import re
>>> x = 'movieID content="770672122">'
>>> re.search(r'\d+', x).group()
'770672122'