我是正则表达式的新手,这是我的情景:
我想使用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;
,...
我该怎么做?
答案 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
这是测试正则表达式的有用工具: