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ď č. 1Môžete použiť
^D*(d)(?:D*1)+D*$
Pozrite si regex demo.
podrobnosti
^
-začať reťazecD*
- 0+ číslic(d)
- Skupina 1: číslica(?:D*1)+
- 1 alebo viac po sebe nasledujúcich výskytovD*
- 0+ číslic1
- tú istú číslicu, ako bola zaznamenaná v skupine 1
D*
- 0+ číslic$
- koniec reťazca.