2014-09-12 210 views
0
var pattern = @"[\S\s][0-9]{1,}\e[0-9]{1,}"; 
var regEx = new Regex(pattern); 

这就产生了零队的比赛时,对这个字符串运行:C#正则表达式不匹配,但正则表达式测试者匹配

“显示名称 - s01e08 - 集name.mp4”

这些正则表达式测试得到匹配: http://www.regexr.com/ http://regexpal.com/

但是这一个蛤蜊是一个.net正则表达式测试仪没有获得一场比赛: http://regexhero.net/tester/

这是我在我的应用程序中遇到的情况。

  1. 为什么会有差异?
  2. 如何修复我的正则表达式以在我的C#应用​​程序中获得匹配?

旁注: 我想使用的实际图案是:

“[\ S \ s]的[0-9] {1,} [。\ E \ E] [0 -9] {1,}“

但是这给了我一个'无法识别的转义序列\ E'。错误麻烦.Net正则表达式测试器和我的C#应用​​程序。 我将为此创建一个新的SO问题,但希望在此提及它,因为我确定有人会注意到我的原始模式不会捕获大写'E'。

+0

你期望'\ e'或'\ E'做什么? – 2014-09-12 23:23:48

+0

[\ S \ s]就像。 – BlackBear 2014-09-12 23:24:42

+0

@ScottChamberlain匹配'E'或'e' – mcqwerty 2014-09-12 23:24:59

回答

4

看起来你正在尝试编写一个RegEx for .NET,而没有真正使用它的语法。 .NET不使用Posix语法就是你可能使用的。

有些错误,我可以打电话:

  • 当你想匹配的信,你不应该ESPACE它。在你之前,你不需要任何“\”。要匹配大写字母E,只需使用E
  • \ s可以匹配.NET中的空白字符。如果你想匹配一个小写字母S,只是用s

这里是你的格局意味着什么:

 
[\S\s] match one space character (\s) or one non-whitespace character (\S) 
[0-9]{1,} match a digit (0 to 9) 1 times or more 
\e match one escape character 
[0-9]{1,} match a digit one or more times 
+0

啊哈!就是这样。我一直在想。谢谢!将在时限到期时接受。 – mcqwerty 2014-09-12 23:29:10

+2

另外,可以将'{1,}'缩短为'+' – 2014-09-12 23:32:47

1

你的模式应该是

[sS](?<Season>\d+)[eE](?<Episode>\d+) 

你基本上没有逃脱字符在范围说明符中,而\d+是一种更简洁的写法[0-9]{1,}

+0

或者使用不区分大小写的修饰符。 – Sam 2014-09-12 23:53:04