Преобразовать строку в целое число - PullRequest
2 голосов
/ 16 ноября 2011

Как я могу преобразовать строку в целое число и удалить каждый символ из этого изменения. Пример:

S = "--r10-" Я хочу иметь это: S = 10

Это не работает:

S = "--10-"
int(S)

Ответы [ 6 ]

9 голосов
/ 16 ноября 2011

Вы можете использовать filter(str.isdigit, s), чтобы сохранить только те символы s, которые являются цифрами:

>>> s = "--10-"
>>> int(filter(str.isdigit, s))
10

Обратите внимание, что это может привести к неожиданным результатам для строк, содержащих несколько чисел

>>> int(filter(str.isdigit, "12 abc 34"))
1234

или отрицательные числа

>>> int(filter(str.isdigit, "-10"))
10

Редактировать : Чтобы сделать эту работу для unicode объектов вместо str объектов, используйте

int(filter(unicode.isdigit, u"--10-"))
2 голосов
/ 16 ноября 2011

сначала удалите все не цифры:

int(''.join(c for c in "abc123def456" if c.isdigit()))
1 голос
/ 16 ноября 2011

Вы можете просто снять - и r:

int("--r10-".strip('-r'))
0 голосов
/ 29 марта 2013

Это просто и не требует импорта каких-либо пакетов.

def _atoi(self, string):
    i = 0
    for c in string:
        i += ord(c)
    return i
0 голосов
/ 16 ноября 2011

Я предпочитаю ответ Свена Марнача, используя filter и isdigit, но если вы хотите, вы можете использовать регулярные выражения:

>>> import re
>>> pat = re.compile(r'\d+')  #  '\d' means digit, '+' means one or more
>>> int(pat.search('--r10-').group(0))
10

Если в строке несколько целых чисел, он вытягивает первое:

>>> int(pat.search('12 abc 34').group(0))
12

Если вам нужно иметь дело с отрицательными числами, используйте это регулярное выражение:

>>> pat = re.compile(r'\-{0,1}\d+')  # '\-{0,1}' means zero or one dashes
>>> int(pat.search('negative: -8').group(0))
-8
0 голосов
/ 16 ноября 2011

используйте регулярное выражение заменить на / w, чтобы заменить несловесные символы на пустую строку. затем брось это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...