Reputation: 1191
How can I convert string into integer and remove every character from that change. Example:
S = "--r10-"
I want to have this: S = 10
This not work:
S = "--10-"
int(S)
Upvotes: 4
Views: 4513
Reputation: 39
This is simple and does not require you to import any packages.
def _atoi(self, string):
i = 0
for c in string:
i += ord(c)
return i
Upvotes: 0
Reputation: 45542
I prefer Sven Marnach's answer using filter
and isdigit
, but if you want you can use regular expressions:
>>> import re
>>> pat = re.compile(r'\d+') # '\d' means digit, '+' means one or more
>>> int(pat.search('--r10-').group(0))
10
If there are multiple integers in the string, it pulls the first one:
>>> int(pat.search('12 abc 34').group(0))
12
If you need to deal with negative numbers use this regex:
>>> pat = re.compile(r'\-{0,1}\d+') # '\-{0,1}' means zero or one dashes
>>> int(pat.search('negative: -8').group(0))
-8
Upvotes: 0
Reputation: 601321
You can use filter(str.isdigit, s)
to keep only those characters of s
that are digits:
>>> s = "--10-"
>>> int(filter(str.isdigit, s))
10
Note that this might lead to unexpected results for strings that contain multiple numbers
>>> int(filter(str.isdigit, "12 abc 34"))
1234
or negative numbers
>>> int(filter(str.isdigit, "-10"))
10
Edit: To make this work for unicode
objects instead of str
objects, use
int(filter(unicode.isdigit, u"--10-"))
Upvotes: 10
Reputation: 953
remove all non digits first like that:
int(''.join(c for c in "abc123def456" if c.isdigit()))
Upvotes: 4
Reputation: 2543
use regex replace with /w to replace non word characters with "" empty string. then cast it
Upvotes: 0