1

我是正则表达式的新手,这是我的场景:
我想使用 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

我写了一个简单的正则表达式进行匹配,但似乎是错误的:

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

然后提取主题并将其分配到变量中;例如:

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

我怎样才能做到这一点?

4

3 回答 3

2

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

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

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

于 2013-05-16T14:21:45.433 回答
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));
于 2013-05-16T14:29:00.747 回答
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/

于 2013-05-16T14:16:47.947 回答