使用RegEx匹配文件名

本文关键字:文件名 RegEx 使用 | 更新日期: 2023-09-27 18:14:09

我是正则表达式的新手,这是我的场景:
我想用RegEx匹配下面的一行:

20130516-003-v5i32.exe
20130516-003-v5i64.exe

上面的行是这样的形式:
第一部分是date,第二部分是固定的,第三部分是v5i + 32 or 64 + .exe中的一个

我想要实现的第一件事是在URL中使用RexEx匹配上述表单,如:
http://definitions.symantec.com/defs/20130516-003-v5i32.exe
http://definitions.symantec.com/defs/20130516-003-v5i64.exe

我写了一个简单的RegEx匹配,但似乎是错误的:

'd{8}-'d{3}-v5i[3-6][2-4]'.exe

然后提取主题并将其赋值给一个变量;例如:

var date=new DateTime(2013,05,16);
var version=32; 
,...

我该怎么做呢?

使用RegEx匹配文件名

要提取某些值,您可以使用正则表达式组,例如:

string s = @"http://definitions.symantec.com/defs/20130516-003-v5i32.exe";
Match m = Regex.Match(s, @"('d{4})('d{2})('d{2})");
    DateTime date = new DateTime(
    Int32.Parse(m.Groups[1].Value),
    Int32.Parse(m.Groups[2].Value),
    Int32.Parse(m.Groups[3].Value));

还有命名组功能(?<groupName>):

Match m = Regex.Match(s, @"(?<year>'d{4})(?<month>'d{2})(?<day>'d{2})");
DateTime date = new DateTime(
    Int32.Parse(m.Groups["year"].Value),
    Int32.Parse(m.Groups["month"].Value),
    Int32.Parse(m.Groups["day"].Value));

由于您的模式只以v5i32.exe或v5i64.exe结束,因此您需要:

'd{8}-'d{3}-v5i(32|64)'.exe

管道符号|提供了交替,而括号提供了分组。下面是对正则表达式操作的一个很好的总结。

我将正则表达式修改如下

'd{8}-'d{3}-v5i[3][2]'.exe

,它匹配下面的字符串:

20130516-003-v5i32.exe

'd{8}-'d{3}-v5i[6][4]'.exe

匹配以下字符串:

20130516-003-v5i64.exe
下面是一个测试正则表达式的有用工具: http://gskinner.com/RegExr/