Что не так с этим регулярным выражением? - PullRequest
1 голос
/ 04 декабря 2009

Я создал одно регулярное выражение, которое должно соответствовать строке, начинающейся с Project, за которой следуют либо #, либо: или - с последующим числом цифр от 1 до 3, либо просто Title. Например, следующие строки должны соответствовать

Проект № 1

Проект № 1

Проект: 1

Проект-123

Название проекта


но следующее не должно совпадать

Проект ABCD

Проект * 978

Мой проект

Проекты обработаны


Мое регулярное выражение выглядит следующим образом:

^(\s)*?((Project( )*?(#|:|-| )( )*?(\d){1,3})|(PROJECT( )*?(#|:|-| )( )*?(\d){1,3})|Project Title|PROJECT TITLE)\b

Ключевое слово проекта должно быть в начале строки.

Для некоторого текста это регулярное выражение работает нормально. Но это регулярное выражение соответствует следующей строке:

Выполненные проекты:

Понятия не имею, почему это происходит. Может кто-нибудь узнать, что не так с моим регулярным выражением?

Я использую C # для этого.

Заранее спасибо !!!

Ответы [ 3 ]

1 голос
/ 04 декабря 2009

Это работает для меня:

Regex project = new Regex(@"^\s*?(?:Project *[#:\- ] *(\d){1,3}|Project Title)",
    RegexOptions.ECMAScript | RegexOptions.IgnoreCase | RegexOptions.Multiline);
1 голос
/ 04 декабря 2009
^\s*Project\s*([\-#:]\s*\d{1,3}|Title)\b

Это позволяет использовать дополнительные пробелы до и после Project, а также между -#: и трехзначным числом

1 голос
/ 04 декабря 2009

Как насчет этого шаблона?

@"Project\s*[#: -]\s*(?:\d+|[A-Z][a-z]+)"

Это не соответствует

Проект ABCD

Проект * 978

Мой проект

Проекты обработаны

Но будет соответствовать следующим шаблонам

Project # 1

Project#1

Project :1

Project-123

Project Title

В Название проекта и Project ABCD есть путаница Я предполагал, что вы хотите только заглавные буквы.

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