我正在Coursera上一门Python课程,涉及正则表达式的使用。其目的是通读一个文本和数字的文件,提取所有的数字,然后求和。对于示例数据(http://py4e-data.dr-chuck.net/regex_sum_42.txt),我有以下代码:
import re
handle = open("regex_sum_42.txt")
numlist=list()
for line in handle :
line = line.rstrip()
stuff = re.findall('([0-9.]+)',line)
for element in stuff :
try :
num = int(element)
numlist.append(num)
except :
continue
print(sum(numlist))
由于“stuff”列表还包括空格(没有数字的行)和“.”,我想我需要try/except行来防止回溯错误。有没有一种更简单的方法来实现这个程序,而没有第二个for循环?在
我不明白为什么要在正则表达式中加一个点
.
,因为代码和示例数据都表明(a)您只想解析整数,(b)示例文件只包含整数。在如果只想解析整数,只需使用:
所以我们使用只匹配数字的正则表达式,不将这些数字存储到列表中,因为它只消耗内存。我们可以马上计算出那条线的和,然后把它们相加。regex还包含一个可选符号
^{pr2}$\-?
,因为负数如-2
也是数字。然后产生:如果允许浮动。这个问题更难解决,因为现在它取决于你允许什么格式。如果您只允许小数点后跟零位或更多位数,我们可以使用:
注意,我们使用一个非捕获组}只返回捕获部分(小数点后面的内容,包括点)。然后程序生成:
(?:..)
作为regex,否则{词的界限
文本包含一个类似}解析为数字。我们可以使用单词边界
'http://www.py4e.com/code3/'
的片段,这将把'4'
和{'\b'
来防止:现在它生产:
因此,结果与前一个结果不同,总共有11个。在
相关问题 更多 >
编程相关推荐