正则表达式在.net中不起作用

本文关键字:不起作用 net 正则表达式 | 更新日期: 2023-09-27 18:27:23

我使用以下表达式。

''W〔A-C〕{3}

目标是匹配A和C之间的任何字符中前面没有任何字符的3个字符。因此,输入"ABC"匹配,但"DABC"不匹配。

当我使用各种在线正则表达式工具(例如。http://gskinner.com/RegExr/),它工作得很好。当我尝试在asp.net RegularExpressionValidator或RegEx类中使用它时,它永远不会匹配任何内容。

我试过各种不同的方法,不允许在比赛前出现一个角色。例如

[^'w] and [^a-zA-Z0-9]

所有这些都在在线工具中工作,但不在.net中。

这个测试失败了,但我不确定为什么?

[Test]
public void RegExWorks()
{
    var regex = new Regex("''W[A-C]{3}");
    Match match = regex.Match("ABC");
    Assert.IsTrue(match.Success);
}

正则表达式在.net中不起作用

这样的东西怎么样:

^[A-C]{3}

它很简单,但似乎符合您的要求,我在rubular.com和.NET 中测试了它

问题是需要有一个'W字符。使用更改来修复此问题,或者使用查找来确保没有无效字符。

变更:

(?:'W|^)[A-C]{3}

但我更喜欢负面的背后:

(?<!'w)[A-C]{3}

'b(如gymbralls的答案)是(?<!'w)(?='w)|(?<='w)(?!'w)的缩写,在这种情况下,它的意思只是(?<!'w),因此是等价的。

此外,在C#中,您可以使用@引用,这样您就不必双重转义,例如:

var regex = new Regex(@"(?<!'w)[A-C]{3}");

您应该考虑尝试:

[Test]
public void RegExWorks()
{
   var regex = new Regex("''b[A-C]{3}");
   Match match = regex.Match("ABC");
   Assert.IsTrue(match.Success); 
}

''b匹配单词边界,这意味着它将匹配"ABC"以及"ABC"answers"$ABC"。使用''W需要有一个非单词字符,这听起来不像是你想要的。

如果我遗漏了什么,请告诉我。

它很简单,就像"[A-C]{3}"这个

好的,所以您可以尝试以下表达式

"[A-C][A-C]{2}"