我试图弄清楚如何创建一个包含以下两行的正则表达式:
02-09-16 08:57PM 24768 Invoice - Copy.docx
05-14-16 08:49PM <DIR> Bin
两者都是目录列表的结果。第一个是包含文件大小的文件。第二个是没有大小但包含类型<Dir>
的目录。
这允许我将所有数据捕获到命名组中,但第一行的大小被捕获到Type字段中:
(?<Date>\S+)\s+(?<Time>\S+)\s+(?<Type>\S+)\s+(?<Name>.+)
如果可能的话,我希望以类型和尺寸结束。我不确定如何同时查找这两个,但如果找到一个,则忽略其中一个。
更新:根据Wiktor的回复,我更新了Regex并且更加接近:
(?<Date>\S+)\s+(?<Time>\S+)\s+(?:(?<Type>\S+)|\d+)\s+(?<Name>.+)
使用这个我可以很容易地解析这两行。但是,第一行24768在类型组中结束。是否可以同时拥有Type和其他Size组?逻辑就像是如果遇到字符(&#39; <Dir>
&#39;),例如,类型;如果你遇到数字(24768),这是大小
答案 0 :(得分:1)
只需将类型和大小捕获分组为非捕获组或组:
^(?<Date>\S+)\s+(?<Time>\S+)\s+(?:(?<Size>\d+)|(?<Type>\S+))\s+(?<Name>.+)$
大小字段将获取数字,否则您将获得一个类型。