我怎样才能解决这个正则表达式,Python?

时间:2016-10-12 06:02:43

标签: python regex

我想为以下字符串构建一个reg表达式模式,并使用Python来提取:

str = "hello w0rld how 34 ar3 44 you\n welcome 200 stack000verflow\n"

我想要做的是提取独立的数字值并添加它们应该是278.一个prelimenary python代码是:

import re
x = re.findall('([0-9]+)', str)

上面代码的问题是char子字符串中的数字如'ar3'会出现。知道如何解决这个问题吗?

5 个答案:

答案 0 :(得分:1)

s = re.findall(r"\s\d+\s", a)  # \s matches blank spaces before and after the number.
print (sum(map(int, s)))       # print sum of all

\d+匹配所有数字。这给出了确切的预期输出。

278

答案 1 :(得分:1)

为什么不尝试这样简单的事情?:

str = "hello w0rld how 34 ar3 44 you\n welcome 200 stack000verflow\n"
print sum([int(s) for s in str.split() if s.isdigit()])
# 278

答案 2 :(得分:0)

这个怎么样?

x = re.findall('\s([0-9]+)\s', str)

答案 3 :(得分:0)

避免部分匹配 用这个: '^[0-9]*$'

答案 4 :(得分:0)

到目前为止发布的解决方案仅适用于前面和后面跟空格的数字(如果有的话)。例如,如果数字出现在字符串的开头或结尾,或者如果数字出现在句子的末尾,则它们将失败。使用word boundary anchors

可以避免这种情况
s = "100 bottles of beer on the wall (ignore the 1000s!), now 99, now only 98"
s = re.findall(r"\b\d+\b", a)  # \b matches at the start/end of an alphanumeric sequence
print(sum(map(int, s))) 

结果:297