Я пытаюсь разбить строку на несколько совпадений, каждое из которых содержит «имя», «атрибуты» и «файлы» (файлы применяются только к файлу с атрибутом каталога)
Строка, которую я пытаюсь отформатировать: (Я использую программу 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)(?!))>)*)
Способ форматирования файла:
имя файла \
атрибуты \
файлы
атрибуты могут иметь значение .{10}\s.{32}
или .{10}
, за которым следует \
.
Не всегда файлы, но если есть, то файлы будут <
+ больше файлов (рекурсивно, может go до бесконечности) + >
.
То, что я надеялся, это Regex ответит:
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ýòó/Õ•? ” \>>
Для каждого возвращаемого совпадения, если бы у него не было файлов, я бы добавил его в древовидное представление, иначе я бы выполнил для него то же самое регулярное выражение (пока ничего не осталось, в конечном итоге создав древовидное представление, в котором есть все файлы) .
Я пытаюсь это сделать чуть больше двух часов, но до сих пор не получил otten немного ближе с моей текущей попыткой (?<name>[^\\/:*?<>"|]+?)\\(?<attributes>.{10}( .{32})*?)\\(?<files>\<(?>\<(?<c>)|[^<>]+|\>(?<-c>))*(?(c)(?!))\>)
.
Regex должен быть. net совместимым.
Извините за плохое объяснение, я не уверен, как это сказать, а также это это мой первый пост.