我正在抓住并保存(作为逗号分隔的文本文件)有关美国众议院唱名表决的信息。
生成的文件中的每一行都采用以下形式:
滚动电话号码,账单,日期,代表,投票,总计,总计当天
我遇到麻烦的时候是从2001年11月1日(唱名电话414)开始刮取日期。正则表达式匹配错误或中断,而不是匹配2001年11月1日。在第一种情况下,它匹配字符串'-AND-'。文本确实在#414和#415之间改变以包括字符串'YEAS-AND-NAYS'。
我打赌我写的正则表达式错了,但我没有看到它。我可能需要更改哪些内容才能匹配日期?相关代码如下。
import urllib2, datetime, sys, re, string
import xml.etree.ElementTree as ET
for i in range(414,514):
if i < 10:
num_string = "00"+str(i)
elif i < 100:
num_string = "0"+str(i)
elif i > 100:
num_string = str(i)
print num_string, datetime.datetime.now()
url = "http://clerk.house.gov/evs/2001/roll"+num_string+".xml"
text = urllib2.urlopen(url).read()
tree = ET.fromstring(text)
notags = ET.tostring(tree, encoding="utf8", method="text")
dte = re.search(r'[0-9]*-[A-Za-z]*-[0-9]*', notags).group()
print dte
答案 0 :(得分:0)
对XML文档使用正则表达式(严肃地说)绝不是一个好主意。
通过从相关XML元素中提取日期(我使用lxml.etree
而不是xml.etree.ElementTree
,您可以在没有任何正则表达式的情况下实现所需的结果,但原理将是相同的。)< / p>
另外,我添加了一种更简单的方法来生成一个3位数字(必要时前导0)。
import urllib2, datetime, sys, string
import lxml.etree
for i in range(414,416):
num_string = '{:03d}'.format(i)
print num_string, datetime.datetime.now()
url = "http://clerk.house.gov/evs/2001/roll"+num_string+".xml"
xml = lxml.etree.parse(urllib2.urlopen(url))
root = xml.getroot()
actdate = root.xpath('//action-date')[0]
dte = actdate.text.strip()
print dte
如果你坚持使用正则表达式,那么[0-9]+-[A-Za-z]+-[0-9]+
会更好,因为它保证至少有一个数字后跟破折号,后跟至少一个字母后跟破折号,后跟至少一个数字(如holdenweb提到的那样)在他的评论中)。