正規表現コードが結果を返さないのはなぜですか?

正規表現コードが結果を返さないのはなぜですか?

これが私のコードです:

import re
word="ABCD 12345"
match=re.search(r"\d*",word)
print(match.group())

このコードでは、出力は得られません (エラーも発生しません)。

助けてください。ここでの問題は何ですか?

答え1

特殊*文字は「一致」を意味します0以上つまり、\d*長さがゼロの一致が許可されます。これは正規表現内の唯一のものであるため、一致全体が長さがゼロになることが許可されます。

確かに*貪欲なので、すべての数字を返します。もし実際には「12345」が存在する位置に到達しました。たとえば、re.match(r"\d*", "12345")整数が返されます。

>>> re.search(r"\d*", "12345")
<re.Match オブジェクト; span=(0, 5), match='12345'>

しかし、あなたの場合、実際には文字列内のその位置に到達せず、代わりに位置 0、長さ 0 に一致があるとすぐに判断します。 'span' 属性に注意してください。

>>> re.search(r"\d*", "ABCD 12345")
<re.Match オブジェクト;スパン=(0, 0)、一致=''>

代わりにを使用することをお勧めします\d+

関連情報