35 Stimmen

RegEx, um festzustellen, ob ein String kein bestimmtes Zeichen enthält

Einfache Frage dieses Mal.

Ich versuche zu testen, ob ein String mit regulären Ausdrücken kein Zeichen enthält. Ich dachte, der Ausdruck hätte die Form "[^x]", wobei x das Zeichen ist, das nicht erscheinen soll, aber das scheint nicht zu funktionieren.

Zum Beispiel,

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

und

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

geben beide true zurück (ich würde false erwarten).

Ich habe mit "[^&]" begonnen und gedacht, dass das & als \& escaped werden muss, aber das schien keinen Unterschied zu machen.

Ideen? Ich nehme an, es ist etwas Kleines.

Außerdem benutze ich .NET, also behalte das im Hinterkopf.

Bearbeiten1:

Ich habe dieses gefunden, aber es scheint nicht das Problem zu beantworten, das ich habe.

Bearbeiten2:

Ich wollte auf die Vorschläge von Kevin und Joel antworten. Diese Vorschläge wären in der Tat schneller, erfüllen aber nicht die Flexibilität, die ich in diesem Fall benötige. Wenn Sie diese Frage über die Suche gefunden haben, schauen Sie auf jeden Fall nach, ob ihre Antworten Ihren Anforderungen entsprechen. In meinem Fall wird der reguläre Ausdruck in eine DataTable-Validierungsmethode übergeben, die jede Zeile durchläuft und überprüft, ob der Inhalt dieser Zeile in einer bestimmten Spalte mit dem übergebenen RegEx übereinstimmt. Da ich diese Methode für mehrere andere DataTables wiederverwenden werde, die validiert werden, wollte ich:

  1. Regex verwenden, um den breitesten Bereich von Validierungen zu ermöglichen, und
  2. immer nach einer positiven Übereinstimmung suchen (d.h. anstatt !Regex.IsMatch(zelle, regexvariable) zu verwenden, wollte ich mich immer darauf verlassen können, Regex.IsMatch(zelle, regexvariable) zu verwenden, da die Mehrheit der DataTables, die diese Methode aufrufen, die positive Übereinstimmung anstelle der negativen verwenden wird.

Hoffentlich hilft das.

0 Stimmen

Wenn Sie nur das Vorhandensein eines einzelnen Zeichens überprüfen, können Sie viel besser ohne Regexes auskommen. Kevin hat recht: Verwenden Sie .IndexOf() oder etwas Einfacheres. Es wird lesbarer, klarer und schneller sein.

2voto

Brett Punkte 21

Ich bin auf diese Frage gestoßen, als ich nach demselben gesucht habe, aber für JavaScript. Der obige Ausdruck hat in meinem Fall nicht funktioniert, aber ich bin auf den folgenden Ausdruck gestoßen, der funktioniert hat. (Für den Fall, dass jemand anderes, der nach einer JavaScript-Lösung sucht, auch hier landet.)

^((?!0).)*$

Dieser Ausdruck wird als Negatives Lookahead bezeichnet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X