对编码字符串使用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
因此,我无法确定它以[[[开头,以]]]结尾,以及其他项目。
有没有办法在正则表达式方面解决这个问题?
您可以使用辅助函数(如:(来取消捕获此字符串
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
,这在您的情况下可能是问题,也可能不是问题。