RegEx и соответствующие коды справа налево - PullRequest
0 голосов
/ 19 декабря 2008

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

code4: CODE3: Кодекса2: code1

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

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

или

Ьс :: фг

из

аб ::: фг

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

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

Заранее спасибо за любую помощь

Закончилось немного RegEx, который делает работу, немного грязно, но работает

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

Та все

Ответы [ 3 ]

4 голосов
/ 19 декабря 2008

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

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

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

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

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

0 голосов
/ 19 декабря 2008

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

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

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

0 голосов
/ 19 декабря 2008

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

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

и затем у вас есть CODE1 в 4 доллара, CODE2 в 3 доллара, CODE3 в 2 доллара, CODE4 в 1 доллар.

...