номера соответствия шаблону python - PullRequest
0 голосов
/ 22 марта 2012

Каков наилучший способ сопоставления чисел в Python

что я пытаюсь сделать?

Я читаю последовательное соединение, выходной сигнал находится в диапазоне 0 - 1023. однако иногда я получаю следующую строку (они читаются как 'str'):

1023
10?1023
1023

Я сопоставляю вывод с алфавитом. момент, когда я использую:

input = '10?1023'
print sum(int(x) for x in re.findall(r'\d+', input))

как я и думал, генератор будет быстрее, чем понимание списка. Но сопоставление дало бы мне 1033. В идеале я бы хотел, чтобы оно ничего не возвращало.

есть идеи? Мне кажется, мне просто нужно поработать над синтаксисом regrep. Есть ли способ исключения суммы при использовании генераторов?

Ответы [ 2 ]

3 голосов
/ 22 марта 2012

Если я правильно понимаю, вы хотите привести строку к целому числу, за исключением того, что вы хотите None, если оно не одно.

try:
    y = int(x)
except ValueError:
    y = None

Или если вы хотите сложить все целые числа водна строка:

>>> input = """1023
... 10?1023
... 1023
... """
>>> 
>>> sum(int(line) if line.isdigit() else 0 for line in input.splitlines())
2046
>>> 
0 голосов
/ 22 марта 2012

Ваше регулярное выражение совпадает с числами в строке, поэтому результат правильный ... он соответствует двум группам, 10 и 1023.

Если вы хотите убедиться, что у вас есть ТОЛЬКО числа, вы можете использоватькак

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