RegEx, jei norite nustatyti, ar eilutėje nėra specifinio pobūdžio

Šį kartą paprastas klausimas.

Bandau patikrinti, ar eilutėje yra simbolis su reguliariomis išraiškomis. Maniau, kad ši išraiška turėjo formą „[^ x]“, kur x yra simbolis, kurio nenorite matyti, bet atrodo, kad tai neveikia.

Pavyzdžiui

 Regex.IsMatch("103","[^0]") 

ir

 Regex.IsMatch("103> 

abu grįžta tiesa (tikiuosi klaidinga).

Aš pradėjau naudoti "[^> ir maniau, kad buvo įmanoma, kad turėčiau pabėgti kaip ir, bet tai neatrodė svarbi.

Idėjos? Manau, tai yra kažkas maža.

Be to, aš naudoju .NET, todėl turėkite tai omenyje.

Redaguoti1:

Radau šį , bet atrodo, kad jis neatsako į turimą klausimą.

Redaguoti2:

Norėjau atsakyti į Keviną ir Joelį . Šie pasiūlymai iš tiesų yra greitesni, tačiau šiuo atveju jie nesuteikia reikiamo lankstumo, todėl, jei jūs surasite šį klausimą per paiešką, tikrai pamatysite, ar jų atsakymai atitiks jūsų poreikius. Mano atveju, įprastinė išraiška pasiekia „DataTable“ testavimo metodą, kuris eina per kiekvieną eilutę ir patikrina, ar šios eilutės turinys tam tikroje stulpelyje atitinka registrą, kuris praeina. Kadangi aš naudosiu šį metodą kelioms kitoms patikrintoms duomenų lentelėms, norėjau:

  • Naudokite „Regex“, kad galėtumėte atlikti plačiausią patikrinimų ir
  • Visada ieškokite teigiamos rungtynės (t.y., vietoj to, kad naudojote! Regex.IsMatch (ląstelė, regexvariable), norėjau pasikliauti visuomet, kad galėčiau naudoti „Regex.IsMatch“ (ląstelė, regexvariable), nes dauguma duomenų bazių, vadinančių šį metodą, naudos teigiamą atitikimą, o ne neigiamą .

Tikiuosi, kad tai padės.

33
13 окт. nustatė jerhinesmith spalio 13 d 2008-10-13 22:43 '08, 10:43 val. 2008-10-13 22:43
@ 6 atsakymai

Jūsų sprendimas yra pusiau teisingas. Rodoma atitiktis skirta kitiems simboliams. Ką norite pasakyti, yra kažkas panašaus į „hey, aš nenoriu matyti šio simbolio visoje eilutėje“.

Tokiu atveju vykdote:

 Regex.IsMatch("103","^[^0]*$") 
51
13 окт. Jorge Ferreira atsakymas, pateiktas spalio 13 d 2008-10-13 22:45 '08 at 10:45 pm 2008-10-13 22:45

Modelis [^ 0] atitiks bet kokį simbolį, kuris nėra lygus nuliui. Abiejuose pavyzdžiuose modelis atitiks pirmąjį simbolį ("1"). Norėdami patikrinti, ar visa eilutė turi nulius, modelis turi būti „^ [^ 0] * $“. Jis rašomas taip: Pradėkite linijos pradžioje, suderinkite savavališką skaičių simbolių, kurie nėra nuliai, ir tada iš karto iki linijos pabaigos. Bet kokia eilutė su nuliu nebus vykdoma. Bet kokia eilutė su nuliais praeis.

border=0
16
13 окт. Ken Paul atsakymas spalio 13 d 2008-10-13 22:53 '08 10:53 val. 2008-10-13 22:53

jei ieškote vieno simbolio eilutėje, įprastinė išraiška atrodo šiek tiek nereikalinga. Kodėl gi ne naudoti .IndexOf arba.

7
13 окт. Kevino atsakymas spalio 13 d 2008-10-13 22:46 '08, 10:46 pm 2008-10-13 22:46

Pirmasis simbolis, kurį analizatorius gauna, yra "1", kuris yra teisingas [^ 0], taip pat [^ todėl abu šie pavyzdžiai yra teisingi.

4
13 окт. atsakymas duotas Stephenbayer Spalio 13 d 2008-10-13 22:45 '08 at 10:45 pm 2008-10-13 22:45

Aš pabėgo į šią problemą, ieškodamas to paties dalyko, bet javascript. Minėta išraiška neveikė mano atveju, bet aš atėjau į žemiau pateiktą išraišką. (Taip pat ir tuo atveju, jei kas nors ieško javascript sprendimo.)

^ ((?! 0).) * $

2
23 марта '10 в 23:24 2010-03-23 23:24 atsakymą Brettas pateikė kovo 23 d. 10 val. 23:24 2010-03-23 ​​23:24

Savo neigimą įdėjote neteisingoje vietoje. [^x] atitiks viską, kas nėra x. Jei x yra eilutėje, eilutė vis dar atitinka išraišką, jei yra kitų simbolių. Vietoj to, jūs norite suderinti teisingumą, jei yra x, ir tada paneigti funkcijos rezultatą:

 Not Regex.IsMatch("103", "0") Not Regex.IsMatch("103 "> 

Ne tai, kad naudojant šiuos paprastus pavyzdžius būtų įprasta String.IndexOf () arba String.Contains ().

2
13 окт. Joel Coehoorn atsakymas spalio 13 d 2008-10-13 22:47 '08, 10:47 val. 2008-10-13 22:47

Kiti klausimai apie žymes arba Ask a question