2012-06-11 3 views
0

Я пытаюсь найти и заменить строку, когда кто-то вводит ее в качестве поискового запроса, если они должны пропустить код, например Z0000ECEL записывается как Z000ECEL, он заменит его на Z00 + ECEL, это так он находит ближайший код к этому и найти его до сих пор, даже если они допускают ошибки, я имею в данный момент:Поиск и замена с помощью Regex

 if (Regex.IsMatch(searchWords[0], "^[a-z]+z00+", RegexOptions.IgnoreCase)) 
     { 
      Regex.Replace(searchWords[0], "[0]+", "*0", RegexOptions.IgnoreCase); 
     } 

Я не хочу, чтобы разместить уайлдкард в начале строки, как это вернет для многих результатов.

+0

должен ли шаблон быть _^z00 + [a-z] + _? –

+0

Нет, поскольку начальное письмо варьируется в зависимости от продукта, поэтому я просто использую^[az] + –

+0

в вашем образце, есть Z000ECEL, поэтому сначала _Z000_, а затем остальные буквы –

ответ

1

ли это делать то, что вы хотите?

Regex.Replace(searchWords[0], "0{3,}", "00*"); 

это заменит 3 или больше нулей с «00 *»

Вы также можете совместить это с первой проверкой

Regex.Replace(searchWords[0], "(?<=^[a-z]+z)0{3,}", "00*", RegexOptions.IgnoreCase); 

Это с участием такого выражения, поэтому 0{3,} будет быть заменен, только если есть ^[a-z]+z.

+0

Это замечательно, спасибо (на самом деле оказалось, что я делаю это не в том месте, где было бы намного сложнее) –

0

Может быть, вы ищете:

str = Regex.Replace(str, "(?i)(^[a-z]+0)0+", "$1+"); 
Смежные вопросы