2009-08-24 23 views
2

Ich versuche, reguläre Ausdrücke zu verwenden, um eine Zeichenfolge zu finden, die nicht die Zeichenfolge eines Symbols (<) gefolgt von einem Leerzeichen enthält. Hier sind einige BeispieleEntspricht einer Zeichenfolge, die keine bestimmte Zeichenfolge enthält

Gültig - "A new description."
Gültig - "A < new description."
Ungültig - "A <new description."

ich nicht den richtigen Ausdruck scheinen zu finden, ein Spiel zu bekommen. Ich verwende den Validator für den regulären Ausdruck von Microsoft, daher brauche ich eine Übereinstimmung und verwende keinen Code, um die Übereinstimmung zu negieren.

Jede Hilfe wäre willkommen.

Danke,
Dale

+1

Was ist der Ausdruck, den Sie jetzt verwenden? – BigBlondeViking

+0

Ich habe mehrere ausprobiert. Mein letzter war etwas wie ^. * <(?! \ S). * $, Aber es findet nur eine Übereinstimmung, wenn ich das weniger als Symbol gefolgt von einem Leerzeichen habe. Ich brauche es, wenn das weniger als Symbol in der Zeichenfolge nicht existiert. –

+0

Ich bin mir nicht sicher, warum <\ S (mit einem Captial "S" nicht funktioniert) es heißt hey, wenn du nach deinem "<" kein Leerzeichen findest, dann pass auf. Als ich das Zeug getestet habe, hat es funktioniert. – chobo2

Antwort

6
@"^(?:[^<]+|<(?!\s))*$" 

Doing eine negative Vorschau für Raum ermöglicht es, wenn das letzte Zeichen in der Zeichenfolge entsprechen ist „<“. Hier ist eine andere Art und Weise:

^(?!.*<\S).+$ 

Die Look-Ahead scannt die gesamte Zeichenfolge für eine „<“ unmittelbar gefolgt von einem Nicht-Leerzeichen. Wenn es keins findet, geht das ". +" Voran und stimmt mit der Zeichenkette überein.

+0

Oh ihr Jungs rockt! Ich kann nicht glauben, dass ich so schnell so viele mögliche Antworten bekommen habe. Dieser Ausdruck^(?!. * <\ S). + $ Erledigt die Aufgabe gut. Danke Alan! –

0
var reg = new Regex(@"<(?!\s)"); 
string text = "it <matches"; 
string text2 = "it< doesn't match"; 

reg.Match(text);// <-- Match.Sucess == true 
reg.Match(text2);// <-- Match.Sucess == false 
+0

was ist mit "es passt nicht"? Ich habe anscheinend keine Übereinstimmung mit dieser Saite. Ich brauche die Zeichenfolge, um gültig zu sein, wenn es das

+0

@Dale, ich habe meine Antwort bearbeitet. – Cleiton

+0

Leider findet das immer noch keine Übereinstimmung, wenn die Zeichenfolge das weniger als-Symbol überhaupt nicht enthält. –

0

eine negative Vorgriff Verwendung: "(?!) <"

+0

das ist der Weg, den ich versucht habe zu gehen, ich kann einfach nicht scheinen, um die Syntax richtig zu machen. –

0

ich denke, das könnte das sein, was Sie suchen.

Valid - "A new description." 
Valid - "A < new description." 
Invalid - "A <new description." 



Try this: <\S 

Dies sucht nach etwas, das ein weniger Zeichen hat und ein Leerzeichen fehlt danach.

In diesem Fall wäre es "<n"

nicht sicher, wie viel es Sie es aber übereinstimmen soll übereinstimmen.

1

Mit anderen Worten, können Sie zwei Dinge in Ihrem string:

  1. jedes Zeichen außer <
  2. A < gefolgt von einem Leerzeichen.

Das können wir schreiben ganz direkt als:

/([^<]|(<))+/ 
+0

Die Parens um "<" sind unnötig, und zusätzliche Parens in einem Regex fügen Overhead hinzu. Außerdem würde ich '/^([^ <] | <) + $ /' verwenden, um zu betonen, dass die gesamte Zeichenfolge übereinstimmen muss. (RegularExpressionValidator fügt ein implizites^... $ hinzu, so dass Sie in diesem speziellen Fall ohne sie auskommen können.) – cjm

+0

Das ist wirklich nah. Es stimmt nicht überein, wenn das weniger als Symbol ganz am Ende der Zeichenfolge ist, aber damit kann ich leben, wenn es nötig ist. –

Verwandte Themen