Python parse int from string

Question:

test1 = 'name1'
test2 = 'name2'
..
test3 = 'name45'
test4 = 'name1231231'

Let’s say I have bunch of strings which start with ‘name’ and are followed by a number of any length.

How can I parse out the number in the string?

Is regex the only way or is there a built-in module that can accomplish this task?

Asked By: ealeon

||

Answers:

In Python 3, you could do the following:

import string

for test in ['name1', 'name2', 'name45', 'name1231231', '123test']:
    print(int(test.strip(string.ascii_letters)))

Giving you:

1
2
45
1231231
123

string.ascii_letters gives you a string containing all upper and lowercase letters. Python’s strip() function takes a string specifying the set of characters to be removed, which in this case is all alpha characters, thus leaving just the numbers behind.

Note: This would not be suitable for a string such as 123name456.


If there are just known common prefixes/suffixes to all strings, the following approach could also be used in Python 3.9:

for test in ['name1', 'name2', 'name45', 'name1231231', '123test']:
    print(test.removeprefix('name').removesuffix('test'))
Answered By: Martin Evans

If you know that the prefix is name, then you can either remove just that string, or you can skip the first four letters, like so:

s = 'name123'
print int(s.replace('name',''))

s = 'name123'
print int(s[4:])
Answered By: Robᵩ
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.