Shiva Krishna Bavandla
Shiva Krishna Bavandla

Reputation: 26648

How to get integer values from a string in Python?

Suppose I had a string

string1 = "498results should get" 

Now I need to get only integer values from the string like 498. Here I don't want to use list slicing because the integer values may increase like these examples:

string2 = "49867results should get" 
string3 = "497543results should get" 

So I want to get only integer values out from the string exactly in the same order. I mean like 498,49867,497543 from string1,string2,string3 respectively.

Can anyone let me know how to do this in a one or two lines?

Upvotes: 84

Views: 295949

Answers (11)

jamylak
jamylak

Reputation: 133504

>>> import re
>>> string1 = "498results should get"
>>> int(re.search(r'\d+', string1).group())
498

If there are multiple integers in the string:

>>> list(map(int, re.findall(r'\d+', string1)))
[498]

Upvotes: 156

hey alex
hey alex

Reputation: 11

  integerstring=""
  string1 = "498results should get"
  for i in string1:
      if i.isdigit()==True 
      integerstring=integerstring+i
   print(integerstring)        

Upvotes: 1

user7864386
user7864386

Reputation:

Another option is to remove the trailing the letters using rstrip and string.ascii_lowercase (to get the letters):

import string
out = [int(s.replace(' ','').rstrip(string.ascii_lowercase)) for s in strings]

Output:

[498, 49867, 497543]

Upvotes: -1

Lovely Sharma
Lovely Sharma

Reputation: 21

this approach uses list comprehension, just pass the string as argument to the function and it will return a list of integers in that string.

def getIntegers(string):
        numbers = [int(x) for x in string.split() if x.isnumeric()]
        return numbers

Like this

print(getIntegers('this text contains some numbers like 3 5 and 7'))

Output

[3, 5, 7]

Upvotes: 1

huseyin39
huseyin39

Reputation: 1403

With python 3.6, these two lines return a list (may be empty)

>>[int(x) for x in re.findall('\d+', your_string)]

Similar to

>>list(map(int, re.findall('\d+', your_string))

Upvotes: 5

Kishor Subedi
Kishor Subedi

Reputation: 11

def function(string):  
    final = ''  
    for i in string:  
        try:   
            final += str(int(i))   
        except ValueError:  
            return int(final)  
print(function("4983results should get"))  

Upvotes: 0

Bobort
Bobort

Reputation: 3218

Here's your one-liner, without using any regular expressions, which can get expensive at times:

>>> ''.join(filter(str.isdigit, "1234GAgade5312djdl0"))

returns:

'123453120'

Upvotes: 30

jacanterbury
jacanterbury

Reputation: 1505

if you have multiple sets of numbers then this is another option

>>> import re
>>> print(re.findall('\d+', 'xyz123abc456def789'))
['123', '456', '789']

its no good for floating point number strings though.

Upvotes: 20

Sepero
Sepero

Reputation: 4677

An answer taken from ChristopheD here: https://stackoverflow.com/a/2500023/1225603

r = "456results string789"
s = ''.join(x for x in r if x.isdigit())
print int(s)
456789

Upvotes: 64

Craig Citro
Craig Citro

Reputation: 6625

>>> import itertools
>>> int(''.join(itertools.takewhile(lambda s: s.isdigit(), string1)))

Upvotes: 7

John La Rooy
John La Rooy

Reputation: 304117

Iterator version

>>> import re
>>> string1 = "498results should get"
>>> [int(x.group()) for x in re.finditer(r'\d+', string1)]
[498]

Upvotes: 10

Related Questions