私が使用した行の最大3つの数字の文字列をチェックしようとしています:
regex = re.compile("\d{0,3}")
ただし、これは機能しません。たとえば、1234
長さが3を超える場合は、数字列であっても、この正規表現は文字列を受け入れます。
文字列の最大3桁をチェックする場合'\d{4,}'
は、長さが3を超える数字列のみに関心があるため、使用する必要があります。
import re
str='123abc1234def12'
print re.findall('\d{4,}',str)
>>> '[1234]'
使用する場合{0,3}
:
str='123456'
print re.findall('\d{0,3}',str)
>>> ['123', '456', '']
最大長3のregex
数字列と空の文字列に一致しますが、これを使用して正確性をテストすることはできません。ここでは、すべての数字列の長さを確認することはできませんが、長さを超える数字列を簡単に確認できます。
したがって、テストするには次のようなことを行います。
str='1234'
if re.match('\d{4,}',str):
print 'Max digit string too long!'
>>> Max digit string too long!
\d{0}
可能なすべての文字列に一致します。「機能しない」の意味は明確ではありませんが、文字列と数字を一致させる場合は、繰り返し演算子をに増やして{1,3}
ください。
4回以上の実行を除外する場合は、次のような方法(?:^|\D)\d{1,3}(?:\D|$)
を試してください。もちろん、一致をキャプチャする場合は、前後の括弧をキャプチャすることを使用して\d{1,3}
ください。
いくつかの理由が考えられます:
\d
数字や数字を検索したいので、おそらくそれをまたはとして綴る必要があり"\\d"
ますr"\d"
。"\d"
たまたま機能するかもしれませんが、それd
は文字列の中で(まだ)特別ではないからです。"\n"
または"\f"
または"\r"
まったく異なることをします。reモジュールのドキュメントを確認し、「生の文字列」を検索してください。
"\\d{0,3}"
{0,3}は「ゼロまたは最大3」を意味するため、ほぼすべてに一致します。したがって、任意の文字列は空の文字列で始まるため、任意の文字列の先頭に一致します。
または、0から3の数字だけで、他には何もない文字列を検索したい場合があります。この場合、のようなものを使用しますr"^\d{0,3}$"
。re.match
その理由は、正規表現が文字列のどこにでも一致するためです(または、使用していない場合は最初にのみ一致しますre.search
)。^
文字列の先頭に$
一致し、末尾に一致するため、両端にそれらを配置することにより、前後に何かがあるものとは一致しません\d{0,3}
。
あなたが使用した方法は、0から3の数字の部分文字列を見つけることです、それはあなたの説明に達することができませんでした。私の解決策:
>>> import re
>>> re.findall('\d','ds1hg2jh4jh5')
['1', '2', '4', '5']
>>> res = re.findall('\d','ds1hg2jh4jh5')
>>> len(res)
4
>>> res = re.findall('\d','23425')
>>> len(res)
5
したがって、次に、桁数を判断するために「if」を使用する必要があります。