2016-08-03 2 views
1

Я хочу извлечь определенное слово из строки, используя регулярное выражение.Извлечь слово из строки с помощью regex

Я получил этот код сейчас, и это прекрасно работает, когда я искать *

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

Почему '([^)] *)' внутри? Вы хотите, чтобы вы исключали любые ')' между '**' s? –

ответ

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

Смежные вопросы