【问题标题】:File formatting with Regex使用正则表达式格式化文件
【发布时间】: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ýòó/Õ­•?     ”       \>>

目前我正在使用(?&lt;name&gt;.+?)\\(?&lt;attributes&gt;.{10}( .{32})*?)\\(?&lt;files&gt;(&lt;(?:[^&lt;&gt;]*|(?&lt;open&gt;\&lt;)|(?&lt;-open&gt;\&gt;))+(?(open)(?!))&gt;)*)

文件的格式化方式:

文件名\attributes\files

属性可以是.{10}\s.{32}.{10},后跟\

并不总是有文件,但如果有,那么文件将是 &lt; + 更多文件(递归,可以到无穷大) + &gt;

我希望这个正则表达式会回应:

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ýòó/Õ­•?     ”       \>>

对于我返回的每个匹配项,如果它没有文件,我会将其添加到树视图中,否则我将对其执行相同的正则表达式(直到没有剩余,最终创建一个包含所有文件的树视图) .

我已经尝试了两个多小时,但我目前的尝试是(?&lt;name&gt;[^\\/:*?&lt;&gt;"|]+?)\\(?&lt;attributes&gt;.{10}( .{32})*?)\\(?&lt;files&gt;\&lt;(?&gt;\&lt;(?&lt;c&gt;)|[^&lt;&gt;]+|\&gt;(?&lt;-c&gt;))*(?(c)(?!))\&gt;),但仍然没有接近。

正则表达式需要与 .net 兼容。

很抱歉解释不佳,我不知道如何措辞,因为这是我的第一篇文章。

【问题讨论】:

    标签: c# .net regex


    【解决方案1】:

    尝试以下:

                string input = File.ReadAllText(FILENAME);
                string pattern = @"^(?'name'[^\\]+)\\(?'attribute'[^\\]+)\\(?'files'.*)";
    
                Match match = Regex.Match(input,pattern);
    
                string name = match.Groups["name"].Value;
                string attribute = match.Groups["attribute"].Value;
                string files = match.Groups["files"].Value;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-04
      相关资源
      最近更新 更多