2017-07-06 4 views
0

Pythonの正規表現でパターンを繰り返すことについて混乱します。 文書から「*」はゼロからN回繰り返すことを意味します。私が文字列abc123defを持っているとします。私は数字を含むストリングの位置を見つけたいので、私は次のコードを使用しPythonでパターンを繰り返すことについての混乱Regex

p = re.compile(r'[\d]*') 
p.search('abc123def').span() 

をそして、それは私が[\d]+に正規表現を変更した場合、それは(3,6)を出力(0,0) を出力します。

なぜ正規表現r'[\d]*'が機能しないのですか?おかげさまで

答えて

2

効果があります。 [\d]*(BTW、角括弧は不要です - \d*はまったく同じことになります)0桁の数字を含むという数字のシーケンスに一致します。空の文字列。空の文字列は、特に文字列の先頭でどこにでもマッチします。 空でない数字のシーケンスを使用する場合は、すでに行ったように\d+を使用してください。

+0

ああ、ok、かなりトリッキーです。 – lenhhoxung

1

文字列の先頭に長さゼロの文字列があります。

1

何が起こっているかを確認するもう一つの方法は、findallを使用することです:最初は

>>> re.findall(r'\d*', 'abc123def') 
['', '', '', '123', '', '', '', ''] 

regex101

>>> re.findall(r'\d+', 'abc123def') 
['123'] 

それともvisually*手段 'ゼロ以上の'機会。文字列の先頭にゼロ桁があります。試合!そのマッチは文字列内のすべての文字です。

部分文字列と一致させる場合は、+を使用してください。

+0

彼は注意を喚起し、質問をした – newtover

関連する問題