2017-11-22 3 views
2

私は乱雑な電話番号のリストを持っていますが、いくつかの(偽の可能性があります)同じ繰り返し数字を含んでいますが、その他の句読点、 .NET RegExを使用してそのような番号を識別します。ここに例があります:正規表現:数字以外の数字を無視して一致する繰り返し数字

00000000000000 
(11)1111111111 
22/ 222-2222222222 
cell +33,333-3333-3333. 
14 244-44444 Ext. 444 

私は最初の4に一致する正規表現が必要ですが、他の数字を持つ最後のものは一致しません。私の^(\d)\1+$は最初の数字をキャッチします。私も^([.-[\D]])\1+$を試してみてください。失敗しました。 ^(\d)(?:[\1-[\D]])+$と同じです。簡単な方法は、\Dで1パスのすべての非数字を削除し、最初の正規表現を使用することですが、正規表現エンジンへの2回の呼び出し(SQL Server内からの高価なCLR呼び出し)を作成したくありません。

出力は、各行に対して単純なブール値0-1です。 0試合があるときに一致し、1が存在しないとき:

1 
1 
1 
1 
0 

UPDATE: はこの質問を少し拡張します。 regexがマッチしたときに、行全体を消去したい場合、置換正規表現は何ですか?したがって、置換正規表現は4つの空白行と1つの元の行を返します。私は見返りでこれをやろうとしていますが、失敗しています。

+0

出力をどのように表示する必要がありますか?そのようにすれば、何をする必要があるのか​​が分かります。 – JBone

+0

これは一致/不一致出力です。行に一致する文字列があれば1、そうでなければ0になります。 –

+2

['^ \ D *(\ d)(?:\ D * \ 1)+ \ D * $'](https://regex101.com/r/jYSfW1/2)を試す –

答えて

2

あなたは

^\D*(\d)(?:\D*\1)+\D*$ 

regex demoを参照してください使用することができます。

詳細

  • ^ - 文字列
  • \D*の開始 - 0+非桁
  • (\d) - グループ1:桁
  • (?:\D*\1)+ - の1以上の連続発生
    • \D* - 0+非数字
    • \1 - グループ1
  • \D*でキャプチャと同じ桁 - 0+非数字
  • $ - 文字列の末尾。
+1

ありがとうウィクショーそれはまた、私の置換正規表現で動作するようです:) –

関連する問題