在Python中对这个正则表达式模式感到困惑

时间:2012-02-24 05:49:24

标签: python html regex

我想在我的网页上找到6位数字:

<td style="width:40px;">705214</td>

我的代码是:

s = f.read()
m = re.search(r'\A>\d{6}\Z<', s)
l = m.group(0)

4 个答案:

答案 0 :(得分:2)

如果您只想在><符号之间找到6位数,请使用以下正则表达式:

import re
s = '<td style="width:40px;">705214</td>'
m = re.search(r'>(\d{6})<', s)
l = m.groups()[0]

请注意使用括号()来表示捕获组。

答案 1 :(得分:1)

我想你想要这样的东西:

m = re.search(r'>(\d{6})<', s)
l = m.group(1)

\d{6}周围的()表示结果的子组。

如果您想在><之间找到多个6位数字串的实例,请尝试以下操作:

s = '<tag1>111111</tag1> <tag2>222222</tag2>'
m = re.findall(r'>(\d{6})<', s)

在这种情况下,m将为['111111','222222']

答案 2 :(得分:1)

您还可以使用前瞻和后视进行检查:

m = re.search(r'(?<=>)\d{6}(?=<)', s)
l = m.group(0)

此正则表达式将匹配6个数字,前面有>,后跟<

答案 3 :(得分:1)

您可能想要检查标记之间的任何空格(制表符,空格,换行符)。 \ s *表示零个或多个空格。

s='<td style="width:40px;">\n\n705214\t\n</td>'
m=re.search(r'>\s*(\d{6})\s*<',s)
m.groups()
('705214',)

解析HTML是一个爆炸。通常,您将文件视为一个长行,删除标记内包含的值之间的前导和尾随空格。也许查看HTML表格解析模块可能会有所帮助,特别是如果您需要解析多个列。

stackoverflow answer using lxml etree 另外,建议使用htmp.parser。值得深思。 (还在学习python提供的模块:))