使用RegEx匹配文件名
本文关键字:文件名 RegEx 使用 | 更新日期: 2023-09-27 18:14:09
我是正则表达式的新手,这是我的场景:
我想用RegEx匹配下面的一行:
20130516-003-v5i32.exe
20130516-003-v5i64.exe
上面的行是这样的形式:
第一部分是date
,第二部分是固定的,第三部分是v5i
+ 32 or 64
+ .exe
中的一个
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;
,...
我该怎么做呢?
要提取某些值,您可以使用正则表达式组,例如:
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/