.net 解析来自FTP LIST命令的响应(语法变体)

.net 解析来自FTP LIST命令的响应(语法变体),.net,ftp,.net,Ftp,FTP LIST命令显示当前工作目录中所有文件和目录的列表。问题是,它根据服务器返回几种不同的格式。有谁知道有一个.NET库能够解析最流行的格式吗?我同意“尝试此正则表达式,如果失败,请尝试下一个正则表达式”的方法。这是我在项目中使用的正则表达式。似乎适用于基于Windows和Unix的FTP服务器。可能有人能够清理它,但我通过在一个类上连接一组属性来构建它。所以,对我来说,这并没有那么残忍 ^((?<DIR>([dD]{1}))|)(?<ATTRIBS>(.*))\s(

FTP LIST命令显示当前工作目录中所有文件和目录的列表。问题是,它根据服务器返回几种不同的格式。有谁知道有一个.NET库能够解析最流行的格式吗?我同意“尝试此正则表达式,如果失败,请尝试下一个正则表达式”的方法。

这是我在项目中使用的正则表达式。似乎适用于基于Windows和Unix的FTP服务器。可能有人能够清理它,但我通过在一个类上连接一组属性来构建它。所以,对我来说,这并没有那么残忍

^((?<DIR>([dD]{1}))|)(?<ATTRIBS>(.*))\s(?<SIZE>([0-9]{1,}))\s(?<DATE>((?<MONTHDAY>((?<MONTH>(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))\s(?<DAY>([0-9\s]{2}))))\s(\s(?<YEAR>([0-9]{4}))|(?<TIME>([0-9]{2}\:[0-9]{2})))))\s(?<NAME>([A-Za-z0-9\-\._\s]{1,}))$
(0-0-9[0-9[0-9[1,{1,}})的)s((((((((((((((((((((((一月)一月及二月及二月124;二月|二月|二月|二月|二月|三月|三月|三月|三月|三月|三月|三月124日)日))日|三月124;三月|三月|三月|三月|三月|三月124日)日)))))))日日日124日日\|四月124日124日)))))))))))))))))))))(图1-9\-\.\us]{1,})$
以下是我一直在使用的FileZilla服务器:

^(?<dir>[\-ld])(?<permission>([\-r][\-w][\-xs]){3})\s+(?<filecode>\d+)\s+(?<owner>\w+)\s+(?<group>\w+)\s+(?<size>\d+)\s+(?<timestamp>((?<month>\w{3})\s+(?<day>\d{2})\s+(?<hour>\d{1,2}):(?<minute>\d{2}))|((?<month>\w{3})\s+(?<day>\d{1,2})\s+(?<year>\d{4})))\s+(?<name>.+)$
([\-ld])(?([\-r][\-w][\-xs]){3})s+(?\d+)\s+(?\w+)\s+(?\w+)\s+(?\d+)\s+((?\w{3})\s+(?\d{2})\s+(?\d{1,2}):(?\d{2})\s+)\124;(?\ w{3}\s+)(?\d{1,2})s++$

^(?[\-ld])(?([\-r][\-w][\-xs]){3})s+(?\d+\s+(?\w+)\s+(?\w+)\s+(?\d+)\s+((?\w{3})s+(?\d{1,2})s+(?\d{1,2}):(?\d{2}));((?\w{3})s+){1,4})$
稍微改变了克里斯·哈斯的版本。已更改,因此日分组也可以由单个数字组成\d{2}->\d{1,2}

感谢您提供原始版本。

^(?[\-ld])((?([\-r][\-w][\-xs]){3})\s+(?\d+\s+)\s+(?\s+)\s+(?\s+)\s+(?\w{3})\s+(?\d{1,2})(?\d{1,2}):(?\d{2})s+);(?\w{3}\s+)\s+(?\d{1,4})$
^(?<dir>[\-ld])(?<permission>([\-r][\-w][\-xs]){3})\s+(?<filecode>\d+)\s+(?<owner>\S+)\s+(?<group>\S+)\s+(?<size>\d+)\s+(?<timestamp>((?<month>\w{3})\s+(?<day>\d{1,2})\s+(?<hour>\d{1,2}):(?<minute>\d{2}))|((?<month>\w{3})\s+(?<day>\d{1,2})\s+(?<year>\d{4})))\s+(?<name>.+)$
在我所在的网站上,所有者以电子邮件地址格式显示。我将所有者和组更改为非空格字符,而不是单词字符


这是对Yodiz版本的Chris Haas版本的扩展。非常感谢

谢谢你的更新!我更新了Chris的答案以包含此更改。请注意,在我使用的服务器上,日期可以是1或2位数字,因此我必须将
(?\d{2})
更改为
(?\d{1,2})
,这对我来说似乎是一个很好的答案。如果这是他用来解决问题的方法,Op应该将其标记为答案,或者提供他自己的答案。
^(?<dir>[\-ld])(?<permission>([\-r][\-w][\-xs]){3})\s+(?<filecode>\d+)\s+(?<owner>\S+)\s+(?<group>\S+)\s+(?<size>\d+)\s+(?<timestamp>((?<month>\w{3})\s+(?<day>\d{1,2})\s+(?<hour>\d{1,2}):(?<minute>\d{2}))|((?<month>\w{3})\s+(?<day>\d{1,2})\s+(?<year>\d{4})))\s+(?<name>.+)$