/ / Regex: Zápas opakujúcich sa číslic ignorujúcich nečíslice - .net, regex, telefónne číslo

Regex: Zhoda opakujúcich sa číslic ignoruje nečíselné čísla - .net, regex, telefónne číslo

Mám zoznam chaotických telefónnych čísel a niektoré(pravdepodobne falošné) obsahujú rovnaké opakujúce sa číslice v celom texte, ale môžu obsahovať aj iné interpunkčné znamienka, medzery, písmená atď. Ako môžem identifikovať také čísla s .NET RegEx. Tu je príklad:

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

Potrebujem regex, aby zodpovedal prvej 4, ale nie posledný, ktorý má iné číslice. môj ^(d)1+$ úlovky prvé číslo. Tiež som sa snažil ^([.-[D]])1+$ aby sa zhodoval s opakujúcim sa znakom, ktorý nie je neciferný. Zlyhalo. Rovnaké pre ^(d)(?:[1-[D]])+$, Jednoduchým spôsobom by bolo odstrániť všetky nečíslice v jednom prechode D a potom použiť prvý regex, ale ja don "t chcem vytvoriť 2 volania na regex engine (to sú drahé CLR volania z SQL Server).

Výstupom je jednoduchý boolean 0-1 pre každý riadok. 0, keď sa nezhoduje, a 1, keď sa zhoduje:

1
1
1
1
0

UPDATE: Ak chcete túto otázku trochu rozšíriť. Aký by bol náhradný regex, ak chcem vymazať celý riadok, keď má regex zápas? Takže náhradný regex vráti 4 prázdne riadky a jeden pôvodný riadok. Snažím sa to urobiť s ohladom, ale zlyhaním.

odpovede:

2 pre odpoveď č. 1

Môžete použiť

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

Pozrite si regex demo.

podrobnosti

  • ^ -začať reťazec
  • D* - 0+ číslic
  • (d) - Skupina 1: číslica
  • (?:D*1)+ - 1 alebo viac po sebe nasledujúcich výskytov
    • D* - 0+ číslic
    • 1 - tú istú číslicu, ako bola zaznamenaná v skupine 1
  • D* - 0+ číslic
  • $ - koniec reťazca.