对编码字符串使用Regex

本文关键字:Regex 字符串 编码 编码字符 | 更新日期: 2023-09-27 18:12:23

我有以下正则表达式:

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

查找用[[something]]]、[[something///comment]]]包装的项目。

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

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

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

因此,我无法确定它以[[[开头,以]]]结尾,以及其他项目。

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

对编码字符串使用Regex

您可以使用辅助函数(如:(来取消捕获此字符串

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

将产生:

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

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

如果取消捕获字符串不是一个选项,则可以使用非捕获组(?:...)和Alternation构造|来允许%5B替代[(与%5D]相同(。

例如,''[''[''[可以替换为(?:''[''[''[|%5B%5B%5B)。修改完整的正则表达式留给读者练习。

但是,请注意,这也将匹配[[[...%5D%5D%5D,这在您的情况下可能是问题,也可能不是问题。