用包含括号问题的字符串替换字符串

时间:2014-01-04 21:55:46

标签: c# regex replace checkedlistbox

我目前遇到与regex.replace相关的问题。我在checkedlistbox中有一个项目,其中包含带括号“()”的字符串:

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

所选项目中的示例内容为

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 个答案:

答案 0 :(得分:0)

要在正则表达式中使用任何特殊字符作为文字,您需要使用反斜杠转义它们。如果您想匹配1+1=2,正确的正则表达式为1\+1=2。否则,加号具有特殊含义。

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

特殊字符:

  • 反斜杠\,
  • 插入^,
  • 美元符号$,
  • 句号或点。,
  • 竖线或竖线符号|,
  • 问号?,
  • 星号或星号*,
  • 加号+,
  • 左括号(,
  • 右括号),
  • 打开方括号[,
  • 打开大括号{

修复 ,您可能会这样做:

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

但是我只使用string.replace(),因为你没有进行任何解析。我无法分辨你正在转换的内容以及为什么使用selected作为if中的正则表达式数组的索引,以及else中的索引作为索引。 / p>

答案 1 :(得分:0)

而不是:

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

尝试:

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