Строка регулярного выражения для поиска нескольких условий - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь написать выражение Regex, которое будет соответствовать сложному числу условий. Я пытаюсь извлечь число, которое следует после ABC, но может быть несколько мест, где ABC 1234 появляется в моей строке. Я также должен учитывать, когда номер используется без ABC, но следует за ним. Например, ABC 1234 / 1134 или ABC 1234-1134, или что-то еще между двумя числами, например and.

Строки, которые я пытаюсь найти, выглядят примерно так:

ABC-210293CompletedReports  // Should match: ABC-210293
CC517036submittedbyfoobarforABC105799WRS877565 // Should match:  ABC105799
ABC#86765 // Should match: ABC#86765
abc99220 / 103743 // Should match: ABC99220 / 103743
AbC99220/103743 // Should match: ABC99220/103743
ABC 123 and 1123 // Should match: ABC 123 and 1123
SubmittedbyFooBar.forABC106156.Solutionbuilton4/23/20184:22PM // Should match: ABC106156

Прямо сейчас, я это регулярное выражение:

((?i)ABC.(?-i))(\d[0-9]{0,10})|( *(\/|-|(?i)AND(?-i)) *\d[0-9]{0,10})

будет соответствовать каждой из указанных выше строк, кроме последней. Он будет соответствовать ABC106156, но также будет соответствовать /23 и /20184 в разделе 4/23/20184:22PM. Я не знаю, как исключить / без потери соответствующих выражений abc99220 / 103743 и AbC99220/103743.

Я слышал о взгляде вокруг, но я не знаю, как это сделать. Как я могу игнорировать даты в этом выражении регулярного выражения?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

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

Шаблон, который вы не хотите захватывать, это 4/23/20184:22PM, поэтому вы можете сопоставить его с \d\/\d+\/\d+:\d+[AP]M или использовать квантификатор, такой как \d{2}, если хотите быть более конкретным.

То, что вы хотите захватить в группе, может выглядеть как (ABC ?[#-]?\d+|\b\d+\b), который также использует чередование для шаблона с ABC или только числа, окруженные границей слова \b.

(?i)(?:\d\/\d+\/\d+:\d+[AP]M|(ABC ?[#-]?\d+|\b\d+\b))

Демонстрация C #

0 голосов
/ 26 апреля 2018

Этот RegEx работает для каждого данного примера. Важно, чтобы вы учитывали регистр (/gi).

Он ищет ABC, тогда может быть необязательный -, # или whitespace, за которым следует digits (1 или более). После цифры (цифр) может быть необязательный "/", " / " или " and ", за которым следует digits (1 или более).

/(ABC(?:-|#|\s)?\d+(?:\/| \/ | and )?\d+)/gi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...