Ответ 1
>>> import re
>>> string1 = "498results should get"
>>> int(re.search(r'\d+', string1).group())
498
Если в строке есть несколько целых чисел:
>>> map(int, re.findall(r'\d+', string1))
[498]
Предположим, что у меня была строка
string1 = "498results should get"
Теперь мне нужно получить только целые значения из строки, например 498
. Здесь я не хочу использовать list slicing
, потому что целые значения могут увеличиваться, как в этих примерах:
string2 = "49867results should get"
string3 = "497543results should get"
Итак, я хочу получить только целые значения из строки точно в том же порядке. Я имею в виду 498,49867,497543
от string1,string2,string3
соответственно.
Может ли кто-нибудь сообщить мне, как это сделать в одной или двух строках?
>>> import re
>>> string1 = "498results should get"
>>> int(re.search(r'\d+', string1).group())
498
Если в строке есть несколько целых чисел:
>>> map(int, re.findall(r'\d+', string1))
[498]
Ответ от ChristopheD здесь: fooobar.com/questions/208408/...
r = "456results string789"
s = ''.join(x for x in r if x.isdigit())
print int(s)
456789
Версия итератора
>>> import re
>>> string1 = "498results should get"
>>> [int(x.group()) for x in re.finditer(r'\d+', string1)]
[498]
>>> import itertools
>>> int(''.join(itertools.takewhile(lambda s: s.isdigit(), string1)))
если у вас несколько наборов чисел, это еще один вариант
>>> import re
>>> print(re.findall('\d+', 'xyz123abc456def789'))
['123', '456', '789']
его не полезно для строк чисел с плавающей запятой.
Вот ваш однострочный, без использования каких-либо регулярных выражений, которые могут время от времени дорожать:
>>> ''.join(filter(str.isdigit, "1234GAgade5312djdl0"))
возвращает:
'123453120'
def function(string):
final = ''
for i in string:
try:
final += str(int(i))
except ValueError:
return int(final)
print(function("4983results should get"))