2008-10-08 38 views

Antwort

60

nur ein FYI

string clean = Regex.Replace(q, @"[^a-zA-Z0-9\s]", string.Empty); 

wäre eigentlich besser wie

string clean = Regex.Replace(q, @"[^\w\s]", string.Empty); 
+3

FYI \ w include _, too. – CSchulz

+9

"\ w" ist nicht dasselbe wie "a-zA-Z0-9". "\ w" enthält Zeichen außerhalb dieses Bereichs – markmnl

3

Ich vermute, dass^funktioniert nicht so, wie Sie denken, dass es außerhalb einer Zeichenklasse tut.

Was Sie sagen, ist es, alles zu ersetzen, was kein alphanumerisches Zeichen ist, durch eine leere Zeichenfolge ODER ein beliebiges führendes Leerzeichen. Ich denke, was du damit sagen willst ist, dass Leerzeichen nicht ersetzt werden können - versuche das \ s in die Klasse [] zu verschieben.

+0

du hast Recht, das beginnt mit (was ich wusste, aber es ist spät) –

1

Es scheint zwei Probleme zu geben.

  1. Sie die^außerhalb eines [], die unter Verwendung entspricht dem Anfang der Zeile
  2. Sie sind nicht ein * mit oder +, was bedeutet, Sie werden nur ein einzelnes Zeichen.

Ich glaube, Sie die folgenden regex wollen @ "([^ a-zA-Z0-9 \ s]) +"

+0

Würde das nicht alle alphanumerischen Zeichen und Leerzeichen durch die leere Zeichenfolge ersetzen? – zigdon

+0

In Bezug auf # 2 ist der Quantifizierer nicht wirklich wichtig, da er alle nicht übereinstimmenden Zeichen in der Zeichenfolge ersetzen möchte und nicht nur eine einzige Ausführung, die eine globale Ersetzung erfordert (.../g in Perl, nicht sicher) der C# -Syntax), mit oder ohne */+. –

+0

C# regex ist @ "^ [a-zA-Z0-9 \ r] + $" – marcel

0

Die circumflex in den eckigen Klammern bedeuten, dass alle Zeichen mit Ausnahme des nachfolgenden Bereichs. Sie möchten einen Zirkumflex außerhalb von eckigen Klammern.

+0

Ja, ich will es drinnen.Passen Sie alles an, was nicht diese Zeichenbereiche sind. –

+1

Oh, wo du "Ich will" gesagt hast, ich dachte, du meintest, du wolltest einen regulären Ausdruck, der dem entspricht. Du meinst, du willst, dass das Ergebnis von Ersetzen das ist. Sie möchten also, dass der reguläre Ausdruck nicht dem entspricht. Mein Gehirn schmerzt. –

12

ich es bekommen habe:

string clean = Regex.Replace(q, @"[^a-zA-Z0-9\s]", string.Empty); 

Haben Sie nicht wissen Sie \ s in den Klammern setzen könnte

+0

Ihre Regex passt nur Strings an, die keine alphanumerische Zahl, Zahlen oder Leerzeichen enthalten. Das^am Anfang eines [] bedeutet "nichts drin" – JaredPar

+2

Das ist genau was ich will. In Regex.Replace möchte ich alles abgleichen, das NICHT ein Buchstabe, eine Zahl oder ein Leerzeichen ist. –

+0

Ah okay, klarer jetzt. – JaredPar

16

Dies:

string clean = Regex.Replace(dirty, "[^a-zA-Z0-9\x20]", String.Empty); 

\ x20 ist ascii hex für 'Leerzeichen' Zeichen

Sie können weitere einzelne Zeichen hinzufügen, die Sie zulassen möchten. Wenn Sie zum Beispiel "?" in der Rückgabestring in Ordnung zu sein add \ x3f.

+0

können Sie auch ein ** ASCII ** Zeichen als oktal abgleichen. In diesem Fall repräsentiert ** \ 040 ** ein Leerzeichen. –

+0

... oder Sie könnten sie einfach wörtlich eingeben, wenn sie einfache Dinge wie Leerzeichen oder? Sind: '[^ A-Za-z0-9?]' Etc. – ChrisF

2

Die folgende Regex für Raum Aufnahme in Textbox ist.

Regex r = new Regex("^[a-zA-Z\\s]+"); 
r.IsMatch(textbox1.text); 

Das funktioniert gut für mich.

+0

Wäre '' A-z \\ s] 'nicht einfacher als' [a-zA-Z \\ s] '? – Alexander

Verwandte Themen