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?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

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

If there are multiple integers in the string:

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

Method 2

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

Method 3

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

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

returns:

'123453120'

Method 4

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.

Method 5

Iterator version

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

Method 6

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

Method 7

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))

Method 8

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]

Method 9

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

Method 10

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]


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x