2012-03-22 24 views
-1

何が最良の方法は、Pythonの数字に一致するpythonパターンの一致番号

何をしようとしている?

私はシリアル接続を読んでいます、出力が0の範囲である - 私は、次の文字列(彼らが「STR」として読み出されます)を取得しかし1023 は時々:

1023 
10?1023 
1023 

を私は一致していますアルファベットに出力する。 私が使用していた瞬間:私は、ジェネレータはリスト内包よりも速くなるだろうと思ったよう

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

。 しかし、マッチングは私に1033を与えます。理想的には私はそれを返すことを望みません。

私はちょうどregrepの構文に取り組む必要があると思いますか?ジェネレータを使用する場合、合計を除外する方法はありますか?

答えて

3

私が正しく理解している場合は、Noneが1でない場合は、文字列を整数にキャストしたいとします。

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

それとも1行上のすべての整数合計したい場合:

>>> input = """1023 
... 10?1023 
... 1023 
... """ 
>>> 
>>> sum(int(line) if line.isdigit() else 0 for line in input.splitlines()) 
2046 
>>> 
+0

のようなものを使用することができますが...しかし、私は 'except 'の使い方を決して理解できませんでした! )それは確かに簡単です;) – beoliver

0

をあなたの正規表現は、文字列内の数字を照合されるので、結果が正しい...それは、二つのグループに一致します10と1023

あなたは数字だけを持っていることを確認したい場合、あなたは私がこのことについて考えていた

^\d+$ 
+0

私はどのように空白に続く数字だけを一致させるでしょうか? – beoliver

+0

\ d + \ s空白が1つだけの場合は\ s +複数の空白がある場合は\ s + – pcalcao

関連する問題