我试图使用正则表达式来解析从PSFTP的dir
命令生成的日志文件。
示例Dir示例1
drwxr-xr-x 1 0 0 0 Jun 21 13:13 .
drwxr-xr-x 1 0 0 0 Jun 21 13:13 ..
-rw-r--r-- 1 0 0 897 Jun 20 15:02 EQA.txt
-rw-r--r-- 1 0 0 897 Jun 20 15:06 EQA1.txt
-rw-r--r-- 1 0 0 897 Jun 16 20:41 Test.txt
-rw-r--r-- 1 0 0 897 Jun 16 21:46 Test1.txt
-rw-r--r-- 1 0 0 897 Jun 21 13:13 Test4.txt
-rw-r--r-- 1 0 0 913 May 31 18:01 test.123456789.txt
psftp> bye
示例Dir示例2
drwx------ 2 MikePC-apps users 4096 Apr 5 2016 .
drwx------ 4 MikePC-apps users 4096 Jan 20 2016 ..
-rw-r--r-- 1 MikePC-apps users 82 Apr 5 2016 test.txt.$01
-rw-r--r-- 1 MikePC-apps users 82 Aug 10 2016 test.txt.$02
-rw-r--r-- 1 MikePC-apps users 82 Aug 10 2016 test.txt.asc
-rw-r--r-- 1 MikePC-apps users 82 Aug 10 2016 test1.txt.$01
-rw-r--r-- 1 MikePC-apps users 1927 Apr 4 2016 test.zip
因此,根据我在网上发现的情况,如果文件超过6个月或将来,则显示年份而不是当天的时间。
例如1,我使用正则表达式:/d/d/s .*.*.*
后跟子字符串函数来检索文件名。
但我不知道如何处理第二个例子。我希望可能有dir
命令的参数包含时间戳,以便我可以使用相同的正则表达式。或者也许还有另一个正则表达式可以处理这两个例子。
非常感谢!
答案 0 :(得分:0)
请尝试以下操作:
string[] inputs = {
"drwxr-xr-x 1 0 0 0 Jun 21 13:13 .",
"ddrwxr-xr-x 1 0 0 0 Jun 21 13:13 ..",
"d-rw-r--r-- 1 0 0 897 Jun 20 15:02 EQA.txt",
"d-rw-r--r-- 1 0 0 897 Jun 20 15:06 EQA1.txt",
"d-rw-r--r-- 1 0 0 897 Jun 16 20:41 Test.txt",
"d-rw-r--r-- 1 0 0 897 Jun 16 21:46 Test1.txt",
"d-rw-r--r-- 1 0 0 897 Jun 21 13:13 Test4.txt",
"d-rw-r--r-- 1 0 0 913 May 31 18:01 test.123456789.txt",
"drwx------ 2 MikePC-apps users 4096 Apr 5 2016 .",
"drwx------ 4 MikePC-apps users 4096 Jan 20 2016 ..",
"-rw-r--r-- 1 MikePC-apps users 82 Apr 5 2016 test.txt.$01",
"-rw-r--r-- 1 MikePC-apps users 82 Aug 10 2016 test.txt.$02",
"-rw-r--r-- 1 MikePC-apps users 82 Aug 10 2016 test.txt.asc",
"-rw-r--r-- 1 MikePC-apps users 82 Aug 10 2016 test1.txt.$01",
"-rw-r--r-- 1 MikePC-apps users 1927 Apr 4 2016 test.zip"
};
string pattern = @"^(?'attrib'[^\s]+)\s+(?'links'[^\s]+)\s+(?'owner'[^\s]+)\s+(?'group'[^\s]+)\s+(?'size'[^\s]+)\s+(?'date'.+)\s+(?'filename'[^$]+)$";
foreach (string input in inputs)
{
Match match = Regex.Match(input, pattern);
Console.WriteLine("attrib : '{0}', links : '{1}', owner : '{2}', group : '{3}', size : '{4}', date : '{5}', filename : '{6}'",
match.Groups["attrib"].Value, match.Groups["links"].Value, match.Groups["owner"].Value, match.Groups["group"].Value,
match.Groups["size"].Value, match.Groups["date"].Value, match.Groups["filename"].Value);
}
Console.ReadLine();