2012-03-27 13 views
18

は、私は、文字列Pythonで正規表現を使用するには?

"3434.35353" 

と別の文字列があると、私は私がもし何か他にパターンを設定しなくても、両方に一致することができ、単一の正規表現を作るにはどうすればよい

"3593" 

他の失敗?私は\d+3593と一致しますが、3434.35353は何もしませんが、(\d+\.\d+)は、小数の1つと一致し、3593の一致が返されません。

私はm.group(1)が戻ることを期待:

"3434.35353" 

または

"3593" 

答えて

32

あなたはそれをオプションにする文字のグループの後に?を置くことができます。

ドットの後に任意の桁数\.\d+をグループ化し、グループ化して(\.\d+)、場合によっては(\.\d+)?とします。

import re 
print re.match("(\d+(\.\d+)?)", "3434.35353").group(1) 
3434.35353 
print re.match("(\d+(\.\d+)?)", "3434").group(1) 
3434 
1

"1または0" 数量詞、?を使用してください:あなたのパターンであることスティック。正規表現は(\d+(\.\d+)?)になります。

利用可能なさまざまな数量子とその使用方法の詳細は、TextWrangler manualの第8章を参照してください。

3

この正規表現は、動作するはず:

\d+(\.\d+)? 

それは必要に応じてドットと1つ以上の数字((\.\d+)?)、続いて1つ以上の数字(\d+)と一致します。

0

Python RegExライブラリを読んでください。リンクがあなたの質問に答え、その理由を説明します。

ただし、オプションの小数点以下と以上の数字が続く数字を一致させるために、あなたは、この例では

re.compile("(\d+(\.\d+)?)") 

を使用することができますか? .\d+キャプチャグループの後に、この部分がオプションであることを指定します。

Example