2016-05-11 15 views
2

Ich habe versucht, einen regulären Ausdruck mit Online-Tool zu machen, aber nicht erfolgreich. Hier ist der String i entsprechen müssen: -Wie findet man einen String, der^im regulären Ausdruck enthält?

27R4FF^27R4FF Text bis zum Ende

  • immer mit alphanumerischen beginnt (Groß- und Kleinschreibung)
  • dann immer caret Zeichen^(kein Platz vor & nach)
  • dann alphanumerische Zeichenfolge
  • dann immer ein weißer Raum
  • dann Zeichenfolge bis zum Ende.

Hier ist der reguläre Ausdruck, der für mich nicht funktioniert: -

((?:[a-z][a-z]*[0-9]+[a-z0-9]*))(\^)((?:[a-z][a-z]*[0-9]+[a-z0-9]*)).*?((?:[a-z][a-z]+)) 

C# -Code: -

string txt = "784SFS^784SFS Value is here"; 

var regs = @"((?:[a-z][a-z]*[0-9]+[a-z0-9]*))(\^)((?:[a-z][a-z]*[0-9]+[a-z0-9]*)).*?((?:[a-z][a-z]+))"; 
Regex r = new Regex(regs, RegexOptions.IgnoreCase | RegexOptions.Singleline); 
Match m = r.Match(txt); 
Console.Write(m.Success ? "matched" : "didn't match"); 
Console.ReadLine(); 

Hilfe geschätzt. Dank

+0

Passt es nicht zusammen? Haben Sie einen Fehler erhalten? Funktioniert '. * \ ^. *', Da Sie denken, dass es wegen des '^' ist? – GolezTrol

+0

stimmte nicht überein ... – user1327064

+0

Muss alphanumerisch sein? Oder kann es nur eine Kette von 6 Wortzeichen sein? –

Antwort

1

Verbatim ^[^\W_]+\^[^\W_]+[ ].*$

^   # BOS 
[^\W_]+  # Alphanum 
\^    # Caret 
[^\W_]+  # Alphanum 
[ ]   # Space 
.*    # Anything 
$    # EOS 

Ausgabe

** Grp 0 - (pos 0 , len 28) 
27R4FF^27R4FF Text until end 
+0

zu stellen Ich bin mir nicht sicher über '[^ \ W_]'. Es enthält eine doppelte Negation: "Match-Zeichen, das kein Nicht-Wort-Zeichen ist". Ich denke, es ist eine komplexe Art, '\ w' (Kleinbuchstaben) zu schreiben.Aber ich mag die ganze Trennung der Regex. Das ist normalerweise sehr informativ für Anfänger. Mehr [Info über Zeichenklassen finden Sie auf MSDN] (https://msdn.microsoft.com/en-us/library/az24scfc%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396). – GolezTrol

+0

@GolezTrol - Was ist das Problem mit der doppelten Negation? '[^ \ W_]' _ist genau_ '[a-zA-Z0-9]'. Wenn das zu viel ist, werden die Leerzeichen Sie töten '(? sln

+0

Dies ist auch eine gewöhnliche ''^^ S \ r \ n} 'sagt Übereinstimmung horizontalen Whitespace. Gewöhnen Sie sich daran, das ist die Werkzeuge in Regex Sie müssen wissen, wie man verwendet. – sln

1

ich nicht bekommen, wenn der String 'bis zum Ende' abgestimmt werden sollte.

Dies funktioniert für

27R4FF^27R4FF Text 

^\w+\^\w+\s\w+$ 

, wenn Sie einige Leerzeichen am Ende haben, versuchen Sie mit

^\w+\^\w+\s[\w\s]+$ 
+1

\ w passt Unterstreichung an, also entspricht dies nicht genau dem Muster, das das OP erwähnte. – Colin

1

starten: https://regex101.com/r/hD0hV0/2

^[\da-z]+\^[\da-z]+\s.*$ 

... oder kommentiert (übernimmt RegexOptions.IgnorePatternWhitespace, wenn Sie das Format im Code verwenden):

Die anderen Antworten stimmen tatsächlich nicht mit dem überein, was Sie beschreiben (zum Zeitpunkt des Schreibens), weil \ w mit Unterstrich übereinstimmt und Sie keine Einschränkungen für "die Zeichenfolge am Ende" angegeben haben.

+1

Also wahr. Alphanumerisch ist eine klare Beschreibung, und es ist sinnvoll, dass ein Code streng alphanumerisch ist. – GolezTrol

+0

@MichaelMcGriff - Nicht, wenn er RegexOptions.IgnoreCase verwendet (was er in seinem Beispielcode ist). – Colin

+0

Ahh, verpasste das in der tatsächlichen C#! –

Verwandte Themen