これが私のコードです:
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+
。