Ich benötige einen regulären Ausdruck, der nur Übereinstimmungen findet, bei denen die gesamte Zeichenfolge mit meiner Abfrage übereinstimmt.
Wenn ich beispielsweise nach Filmen mit dem Namen "Red October" suche, möchte ich nur genau diesen Titel finden (ohne Berücksichtigung der Groß- und Kleinschreibung), aber keine Titel wie "The Hunt For Red October". Ich bin mir nicht ganz sicher, wie ich das machen soll. Weiß jemand?
Vielen Dank!
string.Contains
funktioniert?string1.Equals(string2, StringComparison.OrdinalIgnoreCase);
Antworten:
Versuchen Sie den folgenden regulären Ausdruck:
Standardmäßig wird bei regulären Ausdrücken zwischen Groß- und Kleinschreibung unterschieden. Das
^
markiert den Anfang des übereinstimmenden Textes und$
das Ende.quelle
$
stimmt nicht immer mit dem Ende der Zeichenfolge überein,\z
entspricht (\Z
ist das Äquivalent in Python). Bitte lesen Sie die Antwort von Tim Pietzcker . Dies gilt jedoch für JavaScript.Im Allgemeinen und mit den Standardeinstellung,
^
und$
Anker ist ein guter Weg , um sicherzustellen , dass ein regulärer Ausdruck eine ganze Zeichenfolge übereinstimmt.Ein paar Einschränkungen:
Wenn Ihre Regex eine Abwechslung aufweist, müssen Sie Ihre Regex in eine nicht erfassende Gruppe einschließen, bevor Sie sie mit
^
und umgeben$
:ist natürlich anders als
Außerdem
^
und$
kann eine andere Bedeutung annehmen (Anfang / Ende der Zeile anstelle von Anfang / Ende der Zeichenfolge ), wenn bestimmte Optionen festgelegt sind. In Texteditoren, die reguläre Ausdrücke unterstützen, ist dies normalerweise das Standardverhalten. In einigen Sprachen, insbesondere in Ruby, kann dieses Verhalten nicht einmal ausgeschaltet werden.Daher gibt es einen weiteren Satz von Ankern, die garantiert nur am Anfang / Ende der gesamten Zeichenfolge übereinstimmen:
\A
stimmt am Anfang der Zeichenfolge überein.\Z
Übereinstimmungen am Ende der Zeichenfolge oder vor einem letzten Zeilenumbruch.\z
stimmt ganz am Ende der Zeichenfolge überein.Aber nicht alle Sprachen unterstützen diese Anker, insbesondere JavaScript.
quelle
Verwenden Sie die
^
$
Modifikatoren und , um anzugeben, wo sich das Regex-Muster relativ zum Anfang und Ende der Zeichenfolge befindet:Regex.Match("Red October", "^Red October$"); // pass Regex.Match("The Hunt for Red October", "^Red October$"); // fail
quelle
Ich weiß, dass es etwas spät sein kann, dies zu beantworten, aber vielleicht ist es für jemand anderen nützlich.
Einfachster Weg:
var someString = "..."; var someRegex = "..."; var match = Regex.Match(someString , someRegex ); if(match.Success && match.Value.Length == someString.Length){ //pass } else { //fail }
quelle
Sie müssen Ihren regulären Ausdruck in
^
(Anfang der Zeichenfolge) und$
(Ende der Zeichenfolge) einschließen :quelle
Entschuldigung, aber das ist etwas unklar.
Nach dem, was ich gelesen habe, möchten Sie einen einfachen String-Vergleich durchführen. Dafür brauchen Sie keinen regulären Ausdruck.
string myTest = "Red October"; bool isMatch = (myTest.ToLower() == "Red October".ToLower()); Console.WriteLine(isMatch); isMatch = (myTest.ToLower() == "The Hunt for Red October".ToLower());
quelle
Sie können es wie in diesem Beispiel tun, wenn ich nur einmal den Buchstaben minus a in einer Zeichenfolge abfangen möchte und es mit myRegex.IsMatch () überprüft werden kann.
^ [^ e] [e] {1} [^ e] $
quelle