2016-10-12 64 views
0

我想構建以下字符串一個reg表達模式,並使用Python解壓:我該如何解決這個正則表達式,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

這個怎麼樣?

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

爲了避免部分匹配 使用本: '^[0-9]*$'

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

爲什麼不嘗試一些簡單的像這樣的?:

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 
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