2016-07-14 27 views
-4

Ich versuche, eine Variable auf einen regen in C# verketten, aber es funktioniert nichtwie eine Variable auf einen regulären Ausdruck in C# verketten

string color_id = "sdsdssd"; 
Match variations = Regex.Match (data, @""+color_id+"_[^\""]*\""\W\,\""sizes\""\:\s*\W.*?businessCatalogItemId"":\"")", RegexOptions.IgnoreCase);@""+color_id+"_[^\""]*\""\W\,\""sizes\""\:\s*\W.*?businessCatalogItemId"":\"")"; 

Aber die oben nicht

Arbeits

Wie verketten ein variables Element beim Start in C#

+2

Es ist schwer zu sagen, was genau Sie fragen. Was ist dein gewünschtes Ergebnis? –

+0

ich möchte das "sdsdssd" anstelle von color_id einfügen – Mounarajan

+2

Was meinst du mit "nicht funktioniert"? Ist dein Computer in Flammen aufgegangen? Hat es nicht kompiliert? Gab es irgendwelche * spezifischen * Symptome, oder wurdest du plötzlich von einem Gefühl von schrecklicher Traurigkeit und Sinnlosigkeit überwältigt, als ob das Leben eine lange Reihe unverständlicher Hilferufe wäre? –

Antwort

3

die @ Kennung wirkt sich nur auf die unmittelbar folgenden Zeichenkette regex - Sie können es auf jeden String anwenden müssen, die es braucht:

Match variations = Regex.Match (data,color_id +      
            @"_[^\""]*\""\W\,\""sizes\""\:\s*\W.*?businessCatalogItemId"":\"")", 
           RegexOptions.IgnoreCase); 
+0

Fehler bei der Analyse von 'sdsdssd _ [^ \ "] * \" \ W \, \ "sizes \" \: \ s * \ W. *? businessCatalogItemId ": \") '- Zu viele)' – Mounarajan

+0

Aber ein wortwörtliches String-Literal hat das Muster nicht überstrichen, benutze 'Regex.Escape (color_id) + @" _ [^ ""] * "" \ W, "" sizes " ": \ s * \ W. *? businessCatalogItemId" ":" "" ('Regex.EscapeD() 'kann überflüssig sein, wenn die Variablen niemals nicht-alphanumerische Zeichen enthalten) –

+1

Es ist schwer zu unterscheiden, was Code ist und was Daten in der Zeichenkette sind oder welche Anführungsstriche Sie versuchen zu entschlüsseln - ich habe versucht, Annahmen zu treffen Du hast gepostet, aber vielleicht hast du es falsch verstanden. Der Punkt ist, dass '@' nur auf den Literalstring angewendet wird, der unmittelbar darauf folgt, so dass '@" string1 "+ b +" string2 "' das '@' nicht auf 'string2' anwendet. –

0

Ihr Code funktioniert nicht, weil Sie dies scheinbar zweimal in Ihren Code eingefügt haben.

@ "" + color_id + "_ [^ \" "] \" "\ W \, \" "Größen \" ": \ s \ W * businessCatalogItemId".? ": \" ")"

Wenn Sie das entfernen, sollte die Verkettung funktionieren.

Alternativ können Sie String.Format verwenden das Muster

string pattern = String.Format("@{0}_[^\""]*\""\W\,\""sizes\""\:\s*\W.*?businessCatalogItemId"":\"")", color_id) 
Match variations = Regex.Match (data, pattern, RegexOptions.IgnoreCase); 

Im String.Format zu machen, wird es die {0} mit color_id ersetzen. Sie können damit mehrere Variablen in die Zeichenfolge einfügen. Take a look at this MSDN page for more info

0

In C# 6.0 können Sie interpolierten Strings verwenden:

var color_id = "sdsdssd"; 
var variations = 
    Regex.Matches(
     input, 
     [email protected]"{Regex.Escape(color_id)}_[^""]*""\W,""sizes"":\s*\W.*?businessCatalogItemId"":""", 
     RegexOptions.IgnoreCase 
); 

Die $ bevor eine Zeichenkette, die es möglich wörtliche macht {...} Blöcke zu verwenden Code innerhalb und @ macht ein Stringliteral wörtlich (keine Escape-Sequenzen wie \r oder \n anerkannt sind, werden sie als 2 Symbolkombinationen behandelt, \ und ein Zeichen).

Beachten Sie, dass die letzte ) redundant ist und dazu führt, dass das Muster ungültig wird.

Beachten Sie, dass es die beste Vorgehensweise ist, eine Variable zu umgehen, die innerhalb des Regex-Musters als Literal behandelt werden sollte, aber wenn Ihre color_id immer eine alphanumerische/unterstrichbasierte Zeichenfolge ist, können Sie diese weglassen.

+0

Wie kann ich eine Gruppe auswählen, z. B. wähle ich Werte wie diese Variationen.Gruppen [1] .Wert; – Mounarajan

+0

Verwenden Sie eine '(...)' namens * Capture-Gruppe * um was Sie brauchen. Was musst du aufnehmen? Geben Sie eine Beispielzeichenfolge und die erwartete Ausgabe an. –

+0

Dieser Code funktioniert in VS2015. Damit es in VS2012 funktioniert, müssen Sie 'string.Format (@" {0} _ [^ ""] * "" \ W, "" sizes "" verwenden: \ s * \ W. *? BusinessCatalogItemId "" : "" ", Regex.Escape (color_id))' –