0

我有一堆需要解析的文件,它们的文件名中都有两个日期模式之一(我们正在升级我们的系统,我们需要让文件解析器能够识别这两种日期格式,新和旧的)。

文件名看起来像<fileroot>_yyyyMMdd.logor <fileroot>_MMddyy.log,我需要能够解析出数字来解析日期,但是,每当我尝试使用正则表达式^.*(\\d{6,8}).*$^.*(\\d{6}|\\d{8}).*$解析出日期的数字时,捕获组总是 6字符长度,即使是 8 位数的文件名。

有没有办法强制 C# 中的正则表达式库在尝试匹配正则表达式时尽可能详尽?我知道如何在 Java 中做到这一点,而不是 C# / .NET,我对这门语言还很陌生。

4

2 回答 2

3

问题在这里:“。*”。正则表达式是贪婪的,所以它匹配尽可能多的符号。包括两个第一位数字

解决方案:

1) .*_(\\d{6,8})- 如果你总是在数字前有 _

2).*[^\\d](\\d{6,8})

3).*?(\\d{6,8})

你在 Java 中也会遇到同样的问题,Regex 到处都是贪婪的。

于 2009-11-17T21:51:53.823 回答
1

如果您知道日期后面总是跟一个已知字符串,我会更改正则表达式以强制匹配该字符串:

^.*(\\d{6,8})\.log$

这将强制正则表达式引擎消耗所有 8 位数字以匹配尾随\.log.

于 2009-11-17T21:41:24.500 回答