我有以下正则表达式:
@"{0}(.+?)(?:{1}(.{4}?))*(?:{2}(.+?))?{3}", "\\[\\[\\[", "\\|\\|\\|", "\\/\\/\\/", "\\]\\]\\]
查找包含在[[[something]]],[[[something /// comment]]]中的项目。
我使用它来解析网络响应中的某些内容......
问题是在我的网络响应中我有一些编码如下:
%5B%5B%5BPedido%20de%20Informa%C3%A7%C3%A3o%5D%5D%5D
所以我无法确定它是以[[[和finish with]]]和其他项目一起开始的。
有没有办法在正则表达式方面解决这个问题?
答案 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)
,这可能会或可能不是您的问题。