使用RegEx匹配文件名

时间:2013-05-16 14:13:49

标签: c# regex

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

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

上述行具有以下形式:
第一部分是date,第二部分是固定的,第三部分是v5i + 32 or 64 + .exe

之一

我想要实现的第一件事是使用RexEx在以下URL中匹配上述表单:

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; 
,...

我该怎么做?

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

要提取某些值,您可以使用Regex groups,例如:

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));

答案 2 :(得分:1)

我修改了正则表达式如下

\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/