正则表达式转义问号和双引号

时间:2012-05-30 14:50:21

标签: c# regex escaping

我的数据包含以下字符串的几种情况:

<a href="default.asp?itemID=987">

其中itemID始终不同。我正在使用C#,我希望使用正则表达式获取所有这些itemID。

起初我试过这个

"<a href=\"default.asp?itemID=([0-9]*)\">"

但问号是保留字符。我考虑使用@运算符来禁用字符转义。但仍有一些双引号确实需要逃避。那么我会去

"<a href=\"default.asp\\?itemID=([0-9]*)\">"

应该翻译(作为字符串)到

<a href="default.asp\?itemID=([0-9]*)">

但是Regex.Match方法没有成功。我尝试了同样的正则表达式here并且它有效。我究竟做错了什么?

3 个答案:

答案 0 :(得分:8)

?.是正则表达式的特殊字符,但不能在字符串文件中“按原样”进行转义。 因此,如果您放置一个\,则字符串将出错,如果您不放置\\,则将其视为正则表达式的“特殊字符”。所以:

"@<a href=\"default\\.asp\\?itemID=([0-9]*)\">";

答案 1 :(得分:6)

使用@operator时,您可以使用“”重新获得双引号。

您还需要在正则表达式中转义某些特殊字符,在本例中为chars。\?

试试这个:

@"<a href=""default\.asp\?itemID=([0-9]*)"">"

答案 2 :(得分:1)

尝试转义点'。' \.

的字符