2009-07-21 2 views
2

Я очень неопытен, когда дело доходит до регулярных выражений. То, что я пытаюсь сделать, это перебрать список строк и попытаться найти строки, которые имеют определенный шаблон. Строки, которые меня интересуют, будут в форме "some text ***{some text}***" Как написать RegEx, чтобы соответствовать? Я пытался это сделать:.NET RegEx help

Regex expression = new Regex("***"); 

но это дает мне ошибку. parsing "***" - Quantifier {x,y} following nothing.

Может кто-нибудь указать мне в правильном направлении?

Я пытаюсь выполнить выбор вариантов списка и добавить класс css к соответствующим параметрам.

Regex expression = new Regex("***"); 
foreach (ListItem li in listItemCollection) 
{ 
    if (expression.IsMatch(li.Value)) 
     li.Attributes.Add("class", "highlight1"); 
} 

но это, очевидно, не работает.

Любая помощь приветствуется, ~ ск в Сан-Диего

ответ

9

Вам нужно бежать звездочку, так как это действует метасимволом в RegExp.

Regex expression = new Regex(@"\*\*\*"); 
+0

фиксируется ошибка компиляции ... –

+0

спасибо, я забыл об этом :) – inkedmn

+2

Regex.Escape также полезен: нового Regex (Regex.Escape ("***")); –

3

* имеет особое значение в регулярном выражении.

Если вы хотите, чтобы соответствовать 3 звездочками, попробуйте

Regex expression = new Regex(@"\*\*\*"); 

EDIT:

Если вы только пытаетесь проверить, если строка содержит "***", посмотрите на bdukes' answer.

+0

исправил ошибку компиляции ... –

2

попробовать что-то вроде этого:

\*\*\*[^\*]+\*\*\* 
0

Если вы собираетесь тестировать регулярные выражения, получить приложение для тестирования. Any of these было бы хорошим началом. Я долгое время был прикреплен к Chris Sells's tester, но там есть много.

3

Если все, что вы пытаетесь сделать, соответствует трем звездочкам, почему бы просто не использовать метод string.Contains вместо обычного выражения?

foreach (ListItem li in listItemCollection) 
{ 
    if (li.Value.Contains("***")) 
     li.Attributes.Add("class", "highlight1"); 
} 
+0

+1 для размышлений о реальной проблеме вместо того, чтобы просто исправить код. Это лучшая идея, а не использование Regex. – SolutionYogi

0

Вы должны попробовать это регулярное выражение

\*{3}\{[^\}]*}\*{3} 

Найдет ***{some text}***

Если вы хотите, чтобы текст до * вы должны использовать этот один

^[\w\s]*\*{3}\{[^\}]*\}\*{3} 
  • ^ - be хлопкоочистительных входа
  • [\w\s]* любой символ в AZ, AZ, 0-9, _ и белый пространство, 0 или более раз
  • \*{3} три звездочки
  • \{ матч {
  • [^\}]* любой символ, кроме } 0 или несколько раз
  • \} матч }
  • \*{3} матч три звездочки
+0

@ Cédric, обратите внимание на исправление re: '\ w' - оно также соответствует цифрам. Кроме того, в некоторых вариантах регулярных выражений '\ w' соответствует буквам и цифрам из всех систем записи, а не только ASCII. –