【发布时间】:2020-09-14 10:05:50
【问题描述】:
我正在尝试将一个字符串拆分为多个匹配项,每个匹配项包含“名称”、“属性”和“文件”(文件仅适用于具有目录属性的文件)
我尝试格式化的字符串:(我使用 Hex-edit 程序作为测试文件夹)
Hex Edit\ 1pÝó/Õ\<changelog.txt\ RÖ©òó/Õ ð`s7bÆÔ%ªòó/Õ < \HxD32.exe\ %ovòó/Õ ð‚fNcÆÔÿ—òó/Õ< Þ \HxD64.exe\ ¤M˜òó/Õ ð‚fNcÆÔ:Ùžòó/Õ) †e" \license.txt\ “Lªòó/Õ ðõhÿªÔ“Lªòó/Õ¯? c \readme.txt\ ·&Ÿòó/Õ ðËóyÿªÔp°©òó/Õ„? ¦
\Settings\ IRýòó/Õ\<HxD Hex Editor.ini\ ÉÌ"ô/Õ ôeìÔ)3ÖôeìÔ)3Ö¸Ž? õ \HxD Hex Editor.lang\ yýòó/Õ yýòó/Õyýòó/Õ•? ” \>>
目前我正在使用(?<name>.+?)\\(?<attributes>.{10}( .{32})*?)\\(?<files>(<(?:[^<>]*|(?<open>\<)|(?<-open>\>))+(?(open)(?!))>)*)
文件的格式化方式:
文件名\attributes\files
属性可以是.{10}\s.{32} 或.{10},后跟\。
并不总是有文件,但如果有,那么文件将是 < + 更多文件(递归,可以到无穷大) + >。
我希望这个正则表达式会回应:
Name: Hex Edit
Attributes: 1pÝó/Õ
Files: <changelog.txt\ RÖ©òó/Õ ð`s7bÆÔ%ªòó/Õ < \HxD32.exe\ %ovòó/Õ ð‚fNcÆÔÿ—òó/Õ< Þ \HxD64.exe\ ¤M˜òó/Õ ð‚fNcÆÔ:Ùžòó/Õ) †e" \license.txt\ “Lªòó/Õ ðõhÿªÔ“Lªòó/Õ¯? c \readme.txt\ ·&Ÿòó/Õ ðËóyÿªÔp°©òó/Õ„? ¦
\Settings\ IRýòó/Õ\<HxD Hex Editor.ini\ ÉÌ"ô/Õ ôeìÔ)3ÖôeìÔ)3Ö¸Ž? õ \HxD Hex Editor.lang\ yýòó/Õ yýòó/Õyýòó/Õ•? ” \>>
对于我返回的每个匹配项,如果它没有文件,我会将其添加到树视图中,否则我将对其执行相同的正则表达式(直到没有剩余,最终创建一个包含所有文件的树视图) .
我已经尝试了两个多小时,但我目前的尝试是(?<name>[^\\/:*?<>"|]+?)\\(?<attributes>.{10}( .{32})*?)\\(?<files>\<(?>\<(?<c>)|[^<>]+|\>(?<-c>))*(?(c)(?!))\>),但仍然没有接近。
正则表达式需要与 .net 兼容。
很抱歉解释不佳,我不知道如何措辞,因为这是我的第一篇文章。
【问题讨论】: