-3

私が使用した行の最大3つの数字の文字列をチェックしようとしています:

regex = re.compile("\d{0,3}")

ただし、これは機能しません。たとえば、1234長さが3を超える場合は、数字列であっても、この正規表現は文字列を受け入れます。

4

4 に答える 4

1

文字列の最大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!
于 2012-12-31T12:25:39.123 に答える
0

\d{0}可能なすべての文字列に一致します。「機能しない」の意味は明確ではありませんが、文字列と数字を一致させる場合は、繰り返し演算子をに増やして{1,3}ください。

4回以上の実行を除外する場合は、次のような方法(?:^|\D)\d{1,3}(?:\D|$)を試してください。もちろん、一致をキャプチャする場合は、前後の括弧をキャプチャすることを使用して\d{1,3}ください。

于 2012-12-31T12:25:39.500 に答える
0

いくつかの理由が考えられます:

  • \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}

于 2012-12-31T12:28:01.710 に答える
0

あなたが使用した方法は、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」を使用する必要があります。

于 2012-12-31T12:34:49.093 に答える