为什么Regex.Replace会留下括号?

时间:2014-03-13 14:22:49

标签: c# regex

让我们说:

string result = Regex.Replace("people (MANY)", "(many)", "", RegexOptions.IgnoreCase);

然后,此结果将为people ()。为什么这个以及如何更改正则表达式替换以删除括号?

7 个答案:

答案 0 :(得分:4)

在正则表达式中,有一组字符可以具有特殊含义(\,*,+,?,|,{,[,(,),^,$,。,#和空格),如果你希望它们总是以你的模式表示,你需要逃避它们。

有一个通用函数Regex.Escape将遍历上面的列表并转义它为您找到的每个实例。

Regex.Escape("(many)") // this becomes \(many\)

答案 1 :(得分:3)

你必须逃脱它们:http://msdn.microsoft.com/en-us/library/4edbef7e(v=vs.110).aspx

以下字符必须在正则表达式中进行转义,因为它们在模式匹配中具有含义:

  

。 $ ^ {[(|)* +? \

您可以使用案例\\(

中的反斜杠\)来转义此特殊字符

您的代码已相应更改:

string result = Regex.Replace("people (MANY)", "\(many\)", "", RegexOptions.IgnoreCase);

答案 2 :(得分:1)

这是因为括号在正则表达式中具有含义。他们定义了capturing group

转义括号,使它们不被视为特殊字符,而是括号:

string result = Regex.Replace("people (MANY)", @"\(many\)", "", RegexOptions.IgnoreCase);

答案 3 :(得分:1)

将其更改为

string result = Regex.Replace("people (MANY)", @"\(many\)", "", RegexOptions.IgnoreCase);

()表示正则表达式引擎特有的东西,所以你必须逃避它们。

答案 4 :(得分:1)

括号是分组的特殊字符,您需要将它们转义:

Regex.Replace("people (MANY)", @"\(many\)", "", RegexOptions.IgnoreCase);

答案 5 :(得分:1)

正则表达式中的括号允许您定义capture group。您需要转义它们才能将它们视为常规字符

答案 6 :(得分:0)

括号在正则表达式中具有特殊含义 - 它们用于捕获(因此在替换中,您可以使用$ 1,它会为您提供在parens中的内容)。如果你想要一个文字,你必须逃避它们:\(