2016-08-03 150 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

相关问题