Вопрос

Немного повозился с RegEx, у меня 4 кода в строке.

КОД4:КОД3:КОД2:КОД1

каждый код является необязательным, кроме CODE1.

Так что я мог бы иметь ab:bc:de:fg

или

до н.э.::fg

из

аб:::фг

В каждом случае приведенного выше CODE1 = fg dnd, хоть убей, я не могу разобраться с RegEX.

Это было бы легко сделать как стандартный анализ строк, но, к сожалению, из-за бизнес-объектов это нужно делать через регулярное выражение :-( и возвращать через vb.net RegEX.matche,groups("Code1") fg (надеюсь, это сделает смысл)

Заранее благодарю за любую помощь

В итоге получилось немного RegEx, который выполняет свою работу, немного беспорядочно, но работает.

(^(?<code1>[\w]*)$)|(^(?<code2>[\w]*):(?<code1>[\w]*)$)|(^(?<code3>[\w]*):(?<code2>[\w]*):(?<code1>[\w]*)$)|(^(?<code4>[\w]*):(?<code3>[\w]*):(?<code2>[\w]*):(?<code1>[\w]*)$)

Та все

Это было полезно?

Решение

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

Я не знаю, какой язык вы используете, но разделите строку на «:», и вы получите массив кодов.

Если вы действительно просто хотите проверить, действительна ли строка для этого, тогда

/(\w*:){0,3}\w+/

соответствует вашему описанию и нескольким приведенным вами примерам.

Другие советы

Я не уверен, почему вам нужно сопоставлять коды справа налево.Просто используйте регулярное выражение, чтобы разделить строку:

/(.*):(.*):(.*):(.+)/

и тогда у вас есть КОД1 в $4, КОД2 в $3, КОД3 в $2, КОД4 в $1.

(CODE1)?:(CODE2)?:(CODE3)?:CODE4 будет работать - если ведущий:не имеет значения.В противном случае, если у вас не может быть ведущих двоеточий, перечислите:

(CODE1:(CODE2)?:(CODE3)?:|CODE2:(CODE3)?:|CODE3)?CODE4

Нет ничего особенного в том, что самая правая часть является обязательной, а самая левая — нет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top