Замена строки на строки, которые содержат проблему с круглыми скобками

В настоящее время у меня возникла проблема, связанная с regex.replace . У меня есть пункт в списке проверок, который содержит строку с круглыми скобками "()":

regx2[4] = new Regex( "->" + checkedListBox1.SelectedItem.ToString());

пример setence внутри выбранного элемента

hello how are you (today)

Я использую это в регулярных выражениях, как это:

if (e.NewValue == CheckState.Checked)
{
    //replaces the string without parenthesis with the one with parenthesis
    //ex:<reason1> ----> hello, how are you (today) (worked fine)
    richTextBox1.Text = regx2[selected].Replace(richTextBox1.Text,"->"+checkedListBox1.Items[selected].ToString());
}
else if (e.NewValue == CheckState.Unchecked)
{
    //replaces the string with parenthesis with the one without parenthesis
    //hello, how are you (today)----><reason1> (problem)
    richTextBox1.Text = regx2[4].Replace(richTextBox1.Text, "<reason" + (selected + 1).ToString() + ">");
}

он может заменить строку в первом условии, но не может снова заменить последовательность во втором, потому что она содержит круглые скобки "()", знаете, как решить эту проблему?? спасибо за ответ:)

2 ответа

Решение

Вместо:

regx2[4] = new Regex( "->" + checkedListBox1.SelectedItem.ToString());

Пытаться:

regx2[4] = new Regex(Regex.Escape("->" + checkedListBox1.SelectedItem));

Чтобы использовать какой-либо из специальных символов в качестве литерала в регулярном выражении, вам нужно экранировать их обратной косой чертой. Если вы хотите соответствовать 1+1=2правильное регулярное выражение 1\+1=2, В противном случае знак плюс имеет особое значение.

http://www.regular-expressions.info/characters.html

специальные символы:

  • обратный слеш \,
  • Caret ^,
  • знак доллара $,
  • точка или точка.,
  • вертикальная черта или символ трубы |,
  • вопросительный знак?,
  • звездочка или звездочка *,
  • знак плюс +,
  • открывающая скобка (,
  • закрывающая скобка),
  • открывающая квадратная скобка [,
  • открывающая фигурная скобка {

Чтобы исправить это, вы можете сделать это:

regx2[4] = new Regex("->" + checkedListBox1.SelectedItem.ToString().Replace("(", @"\(").Replace(")", @"\)"));

Но я бы просто использовал string.replace() так как вы не делаете никакого анализа. Я не могу сказать, что вы трансформируете из / в и почему вы используете selected в качестве индекса массива регулярных выражений в if и 4 в качестве индекса в else,

Другие вопросы по тегам