我想为以下字符串构建一个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'会出现。知道如何解决这个问题吗?
答案 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