2016-08-03 6 views
1

Ich möchte ein bestimmtes Wort aus einer Zeichenfolge mit Regex extrahieren.Extrahieren Sie das Wort out of string mit Regex

ich diesen Code bekam jetzt und es funktioniert perfekt, wenn ich für * zu suchen

public static string Tagify(string value, string search, string htmlTag, bool clear = false) 
    { 
     Regex regex = new Regex(@"\" + search + "([^)]*)\\" + search); 
     var v = regex.Match(value); 

     if (v.Groups[1].ToString() == "" || v.Groups[1].ToString() == value || clear == true) 
     { 
      return value.Replace(search, ""); 
     } 

     return value.Replace(v.Groups[0].ToString(), "<" + htmlTag + ">" + v.Groups[1].ToString() + "</" + htmlTag + ">"); 
    } 

Aber jetzt brauche ich für **, suchen, aber leider nicht funktioniert Wie kann ich das erreichen?

+0

Können Sie genauere Spezifikationen und Beispiele angeben? Gewiss klingt das einfachste wie @ @ \ * \ * (. *?) \ * \ * "', Aber das effizienteste ist '@" \ * \ * ([^ *] * (?: \ * (?! \ *) [^ *] *) *) \ * \ * "' –

+0

Definiere "funktioniert nicht", was * tut * es? – Sayse

+0

Warum '([^)] *)' innen? Meinst du, du willst irgendein ')' zwischen '**' s ausschließen? –

Antwort

1

Ich denke, die einfachste Lösung ist, Lazy Dot Matching in einer einfangenden Gruppe zu verwenden.

ersetzen

Regex regex = new Regex(@"\" + search + "([^)]*)\\" + search); 

mit

Regex regex = new Regex(string.Format("{0}(.*?){0}", Regex.Escape(search))); 

Oder in C# 6,0

Regex regex = new Regex($"{Regex.Escape(search)}(.*?){Regex.Escape(search)}"); 

Regex.Escape wird für Sie keine Sonderzeichen entkommen, keine Notwendigkeit \ Symbole manuell anhängen.

+1

Vielen Dank! Das ist es. – apero