尝试提取“当不是x什么都没有”时的正则表达式问题

时间:2012-03-15 02:10:12

标签: c# regex

我遇到了在C#中使用Regex匹配语句的问题

Statement:  "When Not x Is Nothing" 

Pattern: "When Not [\.0-9a-zA-Z_()]* Is Nothing"

此模式也与我不希望发生的声明"When x Is Nothing"相匹配。 任何有关如何改进与预期声明匹配的建议都非常受欢迎。

2 个答案:

答案 0 :(得分:2)

在LINQPad中,正则表达式似乎工作正常(正如其他人所说)

源:

var testStrings = new[]
{
    "When Not x Is Nothing",
    "When x Is Nothing",
};

var regex = new Regex("When Not [.0-9a-zA-Z_()]* Is Nothing");

foreach (var test in testStrings)
{
    var match = regex.IsMatch(test);
    String.Format("regex {0} matches string {1} ? {2}", regex, test, match).Dump();
}

结果:

  

正则表达式何时不是[.0-9a-zA-Z _()] *当不是x时,Nothing匹配字符串   没什么 ?真

     

正则表达式何时不是[.0-9a-zA-Z _()] *没有匹配   字符串当x什么都没有?假

答案 1 :(得分:2)

关于贬低的风险。这会将False返回到控制台:

Regex rgx = new Regex(@"When Not [.0-9a-zA-Z_()]* Is Nothing");
Console.WriteLine(rgx.IsMatch("When x Is Nothing"));

所以我想

  • 你写的正则表达式是错误的,或者至少与正则表达式不一致
  • 您在C#代码中做错了(例如指向错误的正则表达式)
  • 您正在使用损坏的API

我个人会写:

Regex rgx = new Regex(@"^When Not [.0-9a-zA-Z_()]* Is Nothing$");

使其更安全,但我不知道您是匹配字符串还是正在搜索子字符串。