文字列があったとします
string1 = "498results should get"
ここで、498
などの文字列から整数値のみを取得する必要があります。ここでは、整数値が次の例のように増加する可能性があるため、list slicing
を使用したくありません。
string2 = "49867results should get"
string3 = "497543results should get"
したがって、文字列から整数値のみを正確に同じ順序で取得したいと思います。それぞれ498,49867,497543
からstring1,string2,string3
のようになります。
誰でも私にこれを1行または2行で行う方法を教えてもらえますか?
>>> import re
>>> string1 = "498results should get"
>>> int(re.search(r'\d+', string1).group())
498
文字列に複数の整数がある場合:
>>> map(int, re.findall(r'\d+', string1))
[498]
ChristopheD ここからの回答: https://stackoverflow.com/a/2500023/12256
r = "456results string789"
s = ''.join(x for x in r if x.isdigit())
print int(s)
456789
複数の数値セットがある場合、これは別のオプションです
>>> import re
>>> print(re.findall('\d+', 'xyz123abc456def789'))
['123', '456', '789']
ただし、浮動小数点数の文字列には適していません。
イテレータバージョン
>>> 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)))
正規表現を使用しない場合のワンライナーは次のとおりです。
>>> ''.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"))
python 3.6では、これらの2行はリストを返します(空の場合があります)
>>[int(x) for x in re.findall('\d+', your_string)]
に似ている
>>list(map(int, re.findall('\d+', your_string))