Регулярное выражение не работает в .net - PullRequest
2 голосов
/ 10 марта 2012

Я использую следующее выражение.

\ Ш [А-С] {3} * * +1004

Цель состоит в том, чтобы сопоставить 3 символа чего-либо между A и C, у которых нет символов перед ними. Таким образом, с вводом «ABC» он совпадает, а «DABC» - нет.

Когда я пробую это выражение с помощью различных онлайн-инструментов регулярных выражений (например, http://gskinner.com/RegExr/),, оно работает отлично. Когда я пытаюсь использовать его в asp.net RegularExpressionValidator или с классом RegEx, оно никогда ничего не соответствует. 1011 *

Я пробовал разные способы не допустить персонажа перед матчем. например.

[^\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);
}

Ответы [ 5 ]

3 голосов
/ 10 марта 2012

Примерно так:

^[A-C]{3}

Это просто, но, кажется, соответствует тому, что вы спрашиваете, и я проверил это на rubular.com и .NET

3 голосов
/ 10 марта 2012

Проблема в том, что вам требуется , чтобы в нем был \W символ. Используйте исправление, чтобы исправить это, или посмотрите назад, чтобы убедиться в отсутствии недопустимых символов.

Переделка:

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

Но я бы предпочел негативный взгляд:

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

\b (как и в ответе на гимбаллы) - это сокращение от (?<!\w)(?=\w)|(?<=\w)(?!\w), что в данном случае будет означать (?<!\w), что будет эквивалентно.

Кроме того, в C # вы можете использовать кавычку @, чтобы вам не приходилось удваивать экранирование, например:

var regex = new Regex(@"(?<!\w)[A-C]{3}");
2 голосов
/ 10 марта 2012

Вы должны попробовать:

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

\\b соответствует границе слова, что означает, что оно будет соответствовать "ABC", а также "ABC" и "$ ABC". Использование \\W требует наличия не состоящего из слов символа, что не похоже на то, что вы хотите.

Дайте мне знать, если я что-то упустил.

0 голосов
/ 10 марта 2012

ОК, так что вы можете попробовать следующее выражение

"[А-С] [А-С] {2}"

0 голосов
/ 10 марта 2012

Это просто как "[A-C] {3}" это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...