在编码字符串上使用Regex

时间:2014-07-09 16:35:26

标签: c# regex asp.net-mvc

我有以下正则表达式:

@"{0}(.+?)(?:{1}(.{4}?))*(?:{2}(.+?))?{3}", "\\[\\[\\[", "\\|\\|\\|", "\\/\\/\\/", "\\]\\]\\]

查找包含在[[[something]]],[[[something /// comment]]]中的项目。

我使用它来解析网络响应中的某些内容......

问题是在我的网络响应中我有一些编码如下:

%5B%5B%5BPedido%20de%20Informa%C3%A7%C3%A3o%5D%5D%5D

所以我无法确定它是以[[[和finish with]]]和其他项目一起开始的。

有没有办法在正则表达式方面解决这个问题?

2 个答案:

答案 0 :(得分:3)

您可以使用辅助函数来解除此字符串,例如:

Uri.UnescapeDataString("%5B%5B%5BPedido%20de%20Informa%C3%A7%C3%A3o%5D%5D%5D");

将产生:

"[[[Pedido de Informação]]]"

Note:还有HttpUtility.UrlDecode,但需要添加对System.Web的引用,这并不总是需要。

答案 1 :(得分:1)

如果无法取消字符串,您可以使用Noncapturing Group (?:...)Alternation Construct |%5B替代{{1} ([%5D)相同。

例如,]可以替换为\\[\\[\\[。适应完整的正则表达式是留给读者的练习。

但请注意,这也会匹配(?:\\[\\[\\[|%5B%5B%5B),这可能会或可能不是您的问题。