2016-08-03 258 views
1

我想使用正則表達式從字符串中提取某些字。使用正則表達式從字符串中提取字

現在我得到這個代碼,它完美的作品,當我搜索*

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 + ">"); 
    } 

但現在我需要尋找**,但不幸的是,這並不工作 我怎樣才能做到這一點?

+0

你能提供一些更確切的規格和例子嗎?當然,聽起來最簡單的是'@「\ * \ *(。*?)\ * \ *」',但最有效的是'@「\ * \ *([^ *] *(?:\ *( ?!\ *)[^ *] *)*)\ * \ *「' –

+0

定義」不起作用「,它做了什麼? – Sayse

+0

爲什麼'([^)] *)'裏面?你的意思是你想排除'**'之間的任何')'? –

回答

1

我認爲最簡單的解決方案是在捕獲組中使用惰性點匹配。

更換

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

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

或者在C#6.0

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

Regex.Escape會逃避你的任何特殊字符,無需手動添加\符號。

+1

非常感謝!就是這個。 – apero

相關問題