Замена строки на строки, которые содержат проблему с круглыми скобками
В настоящее время у меня возникла проблема, связанная с 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
,