私はちょうど正規表現を学んでいて、ここで少し混乱しています。4 桁以上 7 桁以下の int を抽出したい文字列があります。私は次のようにそれを試しました:
>>> import re
>>> teststring = 'abcd123efg123456'
>>> re.match(r"[0-9]{4,7}$", teststring)
私は 123456 を期待していましたが、残念ながら、これはまったく結果になりません。ここで誰か助けてくれませんか?
@ExplosionPills は正しいですが、正規表現にはまだ 2 つの問題があります。
まず、文字列の末尾$
に一致します。たとえば、文字列の途中で int を抽出できるようにしたいと思います。それを修正するには、これが必要です: abcd123456efg789
123456
r"[0-9]{4,7}(?![0-9])"
^^^^^^^^^
追加された部分は否定的な先読みアサーションであり、「...これ以上数字が続かない」ことを意味します。\d
ただし、次を使用して簡単に説明します。
r"\d{4,7}(?!\d)"
その方がいいです。さて、第二の問題。正規表現の左側に制約がないため、 のような文字列が与えられたabcd123efg123456789
場合、実際には と一致し3456789
ます。したがって、否定の後読みアサーションも必要です。
r"(?<!\d)\d{4,7}(?!\d)"
.match
文字列がパターンで始まる場合にのみ一致します。を使用し.search
ます。
以下も使用できます。
re.findall(r"[0-9]{4,7}", teststring)
あなたの場合、正規表現に一致するすべての部分文字列のリストを返します['123456']
最初に一致した部分文字列だけに関心がある場合は、次のように記述できます。
next(iter(re.findall(r"[0-9]{4,7}", teststring)), None)