2

いくつかの検索を行いましたが、正しい正規表現が見つかりません。

数字、空白、プラス記号のみを含むテキストの正規表現が必要です。のように: [0-9 +]

ただし、そのテキストの数字のみに最小/最大制限があります。

私の提案は次のようなものになりました:

    ^[0-9 \+](?=(.*[0-9]){5,8})$

大丈夫なはず:

  • 「123 456 7」
  • 「12345」
  • 「+123 456 78」

大丈夫ではありません:

  • 「123456789」
  • 「+124 578a」
  • 「+123456789」

誰でもトリックを実行できるソリューションを手に入れましたか?

編集:

私が何を目指しているのか、説明を省略していたことがわかります。

私の正規表現条件は次のとおりです。

  • 5 ~ 8 桁の数字を含める必要があります
  • 空白とプラス記号を許可する
4

3 に答える 3

1

あなた自身の正規表現から、間に空白を入れずに5〜8桁の連続が許可されていると推測しています。それが本当なら、次の正規表現がうまくいくかもしれません (Python で書かれた例)。5 ~ 8 桁の長さの 1 桁のグループを許可します。複数のグループがある場合、1 ~ 3 桁の長さの最後のグループを除いて、各グループが正確に 3 桁を持つことができます。左側の 1 つのプラス記号はオプションです。

電話番号を解析していますか?:)

In [176]: regex = re.compile(r"""
                 ^                  # start of string
                 (?: \+\s )?        # optional plus sign followed by whitespace
                 (?:
                     (?: \d{3}\s )+ # one or more groups of three digits followed by whitespace
                     \d{1,3}        # one group of between one and three digits
                     |              # ALTERNATIVE
                     \d{5,8}        # one group of between five and eight digits
                 )
                 $                  # end of string
                 """, flags=re.X)

# --- MATCHES ---
In [177]: regex.findall('123 456 7')
Out[177]: ['123 456 7']

In [178]: regex.findall('12345')
Out[178]: ['12345']

In [179]: regex.findall('+ 123 456 78')
Out[179]: ['+ 123 456 78']

In [200]: regex.findall('12345678')
Out[200]: ['12345678']

# --- NON-MATCHES ---
In [180]: regex.findall('123456789')
Out[180]: []

In [181]: regex.findall('+ 124 578a')
Out[181]: []

In [182]: regex.findall('+123456789')
Out[182]: []

In [198]: regex.findall('123')
Out[198]: []

In [24]: regex.findall('1234 556')
Out[24]: []
于 2013-01-11T10:06:33.063 に答える
0

あなたは非常に近かった - 先読みを入力の開始に固定し、桁数の上限のために2番目の負の先読みを追加する必要があります:

^(?=(.*\d){5,8})(?!(.*\d){9,})[\d +]+$

また、参考までに、文字クラス内でプラス記号をエスケープする必要はありません[0-9]\d

于 2013-01-11T10:09:41.663 に答える
0

次のようなことができます。

^(?:[ +]*[0-9]){5}(?:(?:[ +]*[0-9])?){3}$

ここでRegexrを参照してください

最初のグループ(?:[ +]*[0-9]){5}は最小 5 桁で、任意の量のスペースと前にプラスがあり、2 番目の部分は、(?:(?:[ +]*[0-9])?){3}任意の量のスペースと前にプラスがあるオプションの数字と一致します。

于 2013-01-11T10:10:16.407 に答える