2017-02-16 8 views
-1

Ich weiß nicht, ob das mit Regex überhaupt möglich ist, aber hier ist das Szenario. Die Zeichenfolgen, mit denen ich übereinstimme, sind durch Leerzeichen getrennte Listen (HTML-Klassen). Zeichenfolgen sollten übereinstimmen, wenn jedes Wort Kleinbuchstaben a-z, Leerzeichen und/oder 0-9 verwendet, es sei denn, das Wort beginnt mit @.Regex - erlauben Zeichen, es sei denn, ein bestimmtes Zeichen geht einem Teil des Strings voraus?

Ideal Ergebnisse:

red-one green-two blue-three = abgestimmt
redOne green-two blue-three = nicht abgestimmt (gefunden ein Großbuchstabe)
red-one blue-two @greenThree = angepasst (Großbuchstaben gefunden, aber das Wort begann mit @)

Irgendwelche Ideen ? Ich denke, es ist nicht möglich, aber vielleicht weiß es ein Guru.

+2

Wenn Sie nach, was Sie versucht haben, und warum es nicht funktioniert, wäre es zu klären, was Sie brauchen. –

Antwort

1

Sie sollten in der Lage sein, den folgenden Ausdruck zu verwenden, das Szenario zu behandeln, die im Wesentlichen auf dem „Wort“ Niveau entspricht, werden handhaben und nur dafür sorgen, dass jedes Wort einen optionalen Hinterraum (zu handhaben es Raum begrenzt ist):

^((@[a-zA-Z-]+|([a-z-])+)\s?)+$ 

Diese besteht im Wesentlichen aus zwei Hauptbedingungen:

  • @[a-zA-Z-]+
    • Dieser Abschnitt ermöglicht es einem einzelnen Satz von Zeichen, Großbuchstaben zu enthalten wenn es beginnt mit einem '@' Zeichen.
  • [a-z-])+
    • Dieser Abschnitt ist Ihr „normaler“ Anwendungsfall, der nur eine Reihe von Zeichen übereinstimmen, die Klein- und Bindestriche enthalten.

Beiden Bedingungen ermöglichen ein optionales hinteres Leerzeichen nach jedem Satz, der jedem „Wort“ in Ihren Listen auf eigenem ausgewertet werden kann.

Beispiel

enter image description here

var tests = new []{ 
    "red-one green-two blue-three", 
    "redOne green-two blue-three", 
    "red-one blue-two @greenThree" 
}; 

foreach(var test in tests) 
{ 
    var regex = new Regex(@"^((@[a-zA-Z-]+|([a-z-])+)\s?)+$"); 
    Console.WriteLine(regex.IsMatch(test)); 
} 
Verwandte Themen