Regex - сопоставлять буквенные символы, которые не соответствуют подмножеству буквенных символов (C #) - PullRequest
3 голосов
/ 27 января 2010

Скажем, у меня есть коллекция строк "123AB", "456CDEF", "789G", "012-HI". Как найти все строки, состоящие из числа (1 или более), за которым следует альфа (1 или более) без специальных символов, где буквенные символы не AB ?

Чтобы уточнить, регулярное выражение, примененное к предыдущей коллекции, должно давать "456CDEF" и "789G". «123AB» игнорируется, поскольку альфа-значение равно AB , а «012-HI» игнорируется, поскольку оно содержит не-альфа. Регулярное выражение для того, что я ищу, за исключением специального правила AB , равно ^[0-9]+[A-Z]+$. Дело не имеет отношения к делу. Я попробовал несколько вариантов правила [^ ], но безуспешно, так как все шаблоны, которые я придумал, допускали использование специальных символов.

Чтобы обобщить, как я могу сопоставить набор альфа-значений, которые не соответствуют определенному подмножеству альфа-значений, используя один шаблон регулярного выражения?

Примечание : "123ABC" также следует принять. Только строки с AB должны игнорироваться.

Ответы [ 3 ]

2 голосов
/ 27 января 2010

Требуется предварительное утверждение: ^[0-9]+(?!AB$)[A-Z]+$

0 голосов
/ 27 января 2010

^\d+(?:a(?:b[a-z]+|[^b][a-z]*)?|[^a][a-z]*)$
начало строки, затем 1 или более цифр, затем либо (A) a следует b, за которым следует большее количество букв, либо (B) a следует любая буква, отличная от b и, возможно, любая буква после этого, или (C) любая буква другая затем следует любая буква, затем конец строки

0 голосов
/ 27 января 2010

Без предварительного просмотра:

^ [0-9] + ([B-Z] | A [AC-Z]) [A-Z] * $

Edit:
Снят, потому что это не будет соответствовать что-то вроде 123A. Но я оставлю ответ видимым в качестве примера того, что не будет работать.

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