我有一个正则表达式问题删除&字符

时间:2011-11-04 23:32:34

标签: c# regex

我有这个字符串

../cms/Client Files/gallery images/home1.jpg&w=914&h=360&cache=1:28:02 PM

我希望删除文件末尾的内容。在c#我正在尝试

html = Regex.Replace(html, @"&(w=([0-9]*))", "", RegexOptions.IgnoreCase);
html = Regex.Replace(html, @"&(h=([0-9]*))", "", RegexOptions.IgnoreCase);
html = Regex.Replace(html, @"&(cache=([0-9]*):([0-9]*):([0-9]*) [AP]M)", "", RegexOptions.IgnoreCase);

但它没有删除任何东西。如果我试试

html = Regex.Replace(html, @"w=([0-9]*)", "", RegexOptions.IgnoreCase);
html = Regex.Replace(html, @"h=([0-9]*)", "", RegexOptions.IgnoreCase);
html = Regex.Replace(html, @"cache=([0-9]*):([0-9]*):([0-9]*) [AP]M", "", RegexOptions.IgnoreCase);

然后我得到

../cms/Client Files/gallery images/home1.jpg&&&

如何删除&'s也是?

3 个答案:

答案 0 :(得分:1)

我应该尝试这个(比使用Regex更容易):

int index = html.IndexOf("&");
if (index >= 0) html = html.Substring(0, index);

或试试这个:

html = Regex.Replace(html, @"\&w=([0-9]*)", "", RegexOptions.IgnoreCase);
html = Regex.Replace(html, @"\&h=([0-9]*)", "", RegexOptions.IgnoreCase);
html = Regex.Replace(html, @"\&cache=([0-9]*):([0-9]*):([0-9]*) [AP]M", "", RegexOptions.IgnoreCase);

答案 1 :(得分:1)

You don't need to escape the & to match it,正如其他人错误地建议的那样。

事实上,您的代码完全按照您的描述运行!我刚刚在LINQPad中运行了您的代码,并验证了结果:

var html = "../cms/Client Files/gallery images/home1.jpg&w=914&h=360&cache=1:28:02 PM";

html = Regex.Replace(html, @"&(w=([0-9]*))", "", RegexOptions.IgnoreCase);
html = Regex.Replace(html, @"&(h=([0-9]*))", "", RegexOptions.IgnoreCase);
html = Regex.Replace(html, @"&(cache=([0-9]*):([0-9]*):([0-9]*) [AP]M)", "", RegexOptions.IgnoreCase);

html.Dump(); // Outputs: "../cms/Client Files/gallery images/home1.jpg"

因此,您应该检查其余代码并查看是否存在其他错误。这是调试器可能向您显示灯光的地方。

另一个想法,因为您的变量名为html&是否可能实际编码为&?这可能解释了一些事情。

作为旁注: 你的模式都不需要(),没有它们它们会更简单。

答案 2 :(得分:0)

这应该够了......

html = Regex.Replace(html, @"\&.*", "", RegexOptions.IgnoreCase);