2016-10-12 2 views
0

Я хотел бы построить схему экспрессии р для следующей строки, и использовать Python для извлечения:Как я могу решить это регулярное выражение, Python?

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

То, что я хочу сделать, это извлечь независимые числовые значения и добавить их, которые должны быть 278. prelimenary код питон:

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

проблема с выше кода является то, что число в пределах полукокса подстроки, как «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

Смежные вопросы