2016-06-07 11 views
1

Ich habe eine HTML-Zeichenfolge, die ich durch einen regulären Ausdruck übergeben muss. Dieser Ausdruck muss MailChimp-Tags im folgenden Format erkennen: *|TagName|*Ich brauche einen regulären Ausdruck, um MailChimp-Tags zu erkennen

Ich bin nicht vertraut mit regulären Ausdrücken. Was ich derzeit verwende ist: \*\|([^]]*)\|\*

Aber seine regulären Ausdruck erkennt die while-Zeichenfolge zwischen 2 Übereinstimmungen. Also, wenn wir haben:

"Sample text with user *|User_Name|*, to verify regular expression with *|Date_Value|*, and some other text",

das Spiel wäre:

"*|User_Name|*, to verify regular expression with *|Date_Value|*" 

Wenn jemand kann mir sagen, wie man den Ausdruck ändern oder was stattdessen verwenden alle Spiele einzeln zu erfassen.

Danke

+0

ich denke, es wird dazu beitragen, \ * \ | \ w + \ | \ * – A191919

Antwort

2

Bitte, versuchen Sie diesen regulären Ausdruck:

string source = 
    "Sample text with user *|User_Name|*, to verify regular expression with *|Date_Value|*, and some other text"; 

    string pattern = @"\*\|.*?\|\*"; // please, notice ".*?" instead of ".*" 

    // ["*|User_Name|*", "*|Date_Value|*"] 
    string[] matches = Regex 
    .Matches(source, pattern) 
    .OfType<Match>() 
    .Select(match => match.Value) 
    .ToArray(); 

Der Trick ist, in den .*? statt .* - Spiel wie wenige Buchstaben wie möglich

+0

Vielen Dank. Das löst es !! –

+0

@M O H: Gern geschehen! –

+0

Intuitiv würde ich für die Regex '\ * \ | [^ * |] + \ | \ *' gehen, d. H. Eine negierte Zeichenklasse verwenden. Soweit ich das beurteilen kann, wird das Ergebnis fast dasselbe sein (Ihre Regex erlaubt leere Tags). Gibt es einen Vorteil bei der Verwendung des nicht-gierigen '?' Über eine negierte Zeichenklasse? –

Verwandte Themen