C#Regex不匹配,但正则表达式测试人员匹配

时间:2014-09-12 23:22:06

标签: c# .net regex match

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

当针对此字符串运行时,这会产生零匹配:

"显示名称 - s01e08 - 剧集名称.mp4"

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

但是这个蛤蜊是.Net正则表达式测试人员并不匹配: http://regexhero.net/tester/

我在我的应用中遇到的是这个。

  1. 为什么会有区别?
  2. 我如何修复'我的正则表达式模式在我的C#app中获得匹配?

  3. 旁注: 我想使用的实际模式是:

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

    但这给了我一个无法识别的转义序列\ E。'麻烦.Net正则表达式测试仪和我的C#应用​​程序出错。 我会为此创建一个新的SO问题,但是我想在这里提一下,因为我确定有人会注意到我的原始模式不会出现大写情况' E'。

2 个答案:

答案 0 :(得分:4)

看起来您正在尝试编写RegEx for .NET而不使用其语法。 .NET不使用Posix语法是你可能正在使用的。

我可以称之为的一些错误:

  • 如果你想匹配一个字母,你不应该使用它。你之前不需要任何\。要匹配大写字母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

答案 1 :(得分:1)

你的模式应该是

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

你基本上不必转义范围说明符中的字符,而\d+是一种更简洁的写作方式[0-9]{1,}