Tekens negeren in reguliere expressie

Hoe zou ik een reguliere expressie schrijven die aan de volgende criteria voldoet?

  • Geen cijfers
  • Geen speciale tekens
  • Geen spaties

in een string


Antwoord 1, autoriteit 100%

Het caret in een tekenklasse [^ ] is de ontkenningsoperator die gebruikelijk is in de meeste implementaties van reguliere expressies (Perl, .NET, Ruby, Javascript, enz.). Dus ik zou het als volgt doen:

[^\W\s\d]
  • ^ – Komt overeen met alles wat NIET in de tekenklasse zit
  • \W – komt overeen met niet-woordtekens (een woordteken wordt gedefinieerd als a-z, A-Z, 0-9 en onderstrepingsteken).
  • \s – komt overeen met witruimte (spatie, tab, regelterugloop, regelinvoer)
  • \d – komt overeen met 0-9

Of je kunt een andere benadering kiezen door simpelweg alleen op te nemen wat je wilt:

[A-Za-z]

Het belangrijkste verschil hier is dat de eerste onderstrepingstekens zal bevatten. Dat, en het demonstreert een manier om de uitdrukking in dezelfde bewoordingen te schrijven als jij denkt. Maar als je omkeert en denkt om tekens op te nemen in plaats van ze uit te sluiten, kan dat soms resulteren in een gemakkelijker te lezen reguliere expressie.

Het is mij niet helemaal duidelijk welke speciale tekens je niet wilt. Maar ik heb beide oplossingen opgeschreven voor het geval de ene beter voor je werkt dan de andere.


Antwoord 2, autoriteit 2%

In Perl zou het zoiets zijn als:

$string !~ /[\d \W]/

Het hangt natuurlijk af van je definitie van “speciale tekens”. \Wkomt overeen met alle niet-woordtekens. Een woordteken is elk alfanumeriek teken plus het spatieteken.


Antwoord 3

Probeer ^[^0-9\p{P} ]$


Antwoord 4

var StringInputToClean = @"[:(M)?*a',\y<>&a#~%{}[email protected]\\ /27!;$+]";
var pattern = @"[^a-zA-Z0-9\s]";
string replacement = "";
var result = Regex.Replace(StringInputToClean, pattern, replacement);

Other episodes