2016-10-12 20 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) 

問題は「AR3」のような文字の部分文字列内の数字が現れるだろうということです。どのようにこれを解決するための任意のアイデア?

答えて

0

これはいかがですか? '^[0-9]*$'

0

。これにより、正確な期待出力が得られます。

278 
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+試合全ての数字:この部分一致 使用を避けるために

x = re.findall('\s([0-9]+)\s', str) 
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

関連する問題