2016-04-27 19 views
0

Ich habe folgende regex und es schlägt fehl.Regulärer Ausdruck zwischen Sonderzeichen

In diesem regex Ich brauche alle Zeichen zwischen + und #

var regexMN = new Regex("+(.*)#"); 
var mn = regexMN.Match(tranFileName); 
r.MachineNumber = mn.Groups[1].ToString(); 

Und hier zwischen # und .

var regexTN = new Regex("#(.*)."); 
var tn = regexTN.Match(tranFileName); 
r.TransactionNumber = tn.Groups[1].ToString(); 

Jeder Hinweis zu bekommen?

+3

Sie müssten die "+" und das entkommen "" Da sie Regex-Bedeutungen ihrer eigenen – BugFinder

Antwort

3

+ und . haben spezielle Bedeutung in Regexes. Wenn Sie nach einem Pluszeichen oder einem Punkt suchen möchten, müssen Sie es mit einer \ voranstellen.

var regexMN = new Regex(@"\+(.*)#"); 

Und

var regexTN = new Regex(@"#(.*)\."); 
+1

haben, würde ich auch empfehlen, den Teil innerhalb der Gruppe in '[^ #] *' bzw. '[^.] *' zu ändern. Dies hat auch den Vorteil, besser zu funktionieren. – Joey

+1

@Joey Würdest du bitte deine Erklärung als Antwort hinzufügen. –

+2

Um das Leben noch mehr Spaß zu machen \ hat eine besondere Bedeutung für C# auch, wenn Sie nicht wortwörtlich String-Literale verwenden, wie diese Antwort tut. Wenn Sie normale Strings verwenden, müssen Sie den Schrägstrich wie folgt verdoppeln: "\\ + (. *) #" –