2010-07-22 4 views
1

Мне нужно написать регулярное выражение для «символа опции» для моей компании, чтобы мы могли проверить эти символы на нашем сайте.Можно ли написать регулярное выражение для этого типа текста?

Символ вариант состоит из двух частей:

Part1   Part2 
_ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ 

Я могу написать регулярное выражение для Part2, как это довольно просто.

Однако, часть 1 (первые 6 позиций символов) может быть немного сложной.

Она сводится к тому:

  • Part1 должен быть {6} символов длиной всего.
  • В первых позициях должно быть между {1,4} альфа-символами.
  • После этого может быть {1} числовой символ.
  • И, наконец, остальные оставшиеся символы должны быть пробелами, поэтому Part1 составляет до 6 символов.

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

Как избежать грубого заставить его выглядеть примерно так:

([A-Za-z]{1}[0-9]{1}[ ]{4}| 
[A-Za-z]{2}[0-9]{1}[ ]{3}| 
[A-Za-z]{3}[0-9]{1}[ ]{2}| 
[A-Za-z]{4}[0-9]{1}[ ]{1}| 
[A-Za-z]{1}[ ]{5}| 
[A-Za-z]{2}[ ]{4}| 
[A-Za-z]{3}[ ]{3}| 
[A-Za-z]{4}[ ]{2}| 
[A-Za-z]{5}[ ]{1}) 

Вот несколько примеров опционных символов (помните, игнорировать все, за первые 6 символов):

F  123456P12345678 
CMG 123456P12345678 
AAPL 123456P12345678 
GOOG1 123456C12345678 
F5 123456C12345678 
+0

Может ли часть 2 также начинаться с не буквенно-цифрового символа (пунктуация и т. Д.)? –

+0

Если после первых 6 символов всегда есть материал, а последний символ в 6 всегда является пробелом, тогда '[a-zA-Z] {1,4} \ d? * (?! [^]) 'должен работать. Если строка 'AAAA4 (3 пробела) 1234', то она не будет. – NorthGuard

+0

Часть 2 всегда начинается с числового. – FrankTheTank

ответ

6

Вы можете использовать такое выражение:

^[A-Za-z]{1,4}\d? +\b(?<=^.{6}) 

Объяснение:

^: Соответствует началу строки или строки (в зависимости от того, установлен ли параметр RegexOptions.Multiline или нет).

[A-Za-z]{1,4}\d? +: Матч 1 до 4 буквенных символов и дополнительный разряд, а затем, по меньшей мере, одно пространства

\b: утверждающее, что сейчас мы находимся на границе слова (то есть, что следующий символ является алфавитно-цифровым)

(?<=^.{6}): Убедитесь, что указанное совпадение имеет ровно шесть символов.

+0

Мне нужно было бы изменить это, чтобы обрабатывать дополнительную цифровую цифру, не так ли? – FrankTheTank

+0

Кроме того, я не знаю, кто вас ниспровергал. Если бы у меня была возможность, я бы воздвигнул вас. – FrankTheTank

+0

Моя первая версия имела ошибку и позволяла ложные срабатывания. Должно быть, было отклонено, пока я исправлял это :) –

0

Попробуйте следующее:

[A-Za-z]{1,4}[0-9]{1}?\s*? 

{1,4} позволяет переменное число буквенно-цифровых, то ? позволяет ему быть необязательным, и * похож на {0,}.

+0

Не будет ли это соответствовать количеству пробелов? Количество пробелов должно основываться на количестве оставшихся символов в 6-символьном пространстве. – FrankTheTank

+0

Зачем использовать [0-9] {1}? а не просто [0-9]? – NorthGuard

+0

@FrankTheTank - если нет конкретной причины, по которой регулярное выражение должно это сделать, у меня будет какая-то другая часть кода, проверяющая, что все выражение содержит законное количество символов, и используйте регулярное выражение для того, что хорошо; знак сопоставив. @ fy-tide - да, на самом деле, [0-9] совпадает с [0-9] {1}. Не знаю, почему я это написал. – eykanal

0

сделать это как проверку на 2 части, первая часть - это регулярное выражение, вторая часть - длина совпадения с регулярным выражением.

т.е. что-то подобное для регулярного выражения:

[: альфа:] {1,4} [: цифры:]? [] {1,5}

Проверка по длине согласованное выражение гарантирует, что оно действительно, поскольку регулярное выражение не будет соответствовать, если отдельный раздел недействителен. Итак, если каждый раздел (альфа, цифра и пробел) действителен, а длина равна 6, то вы имеете действительное совпадение.

+0

Я ограничен только регулярными выражениями. Мы используем это выражение в элементах проверки правильности на нашем интерфейсе и т. Д. – FrankTheTank

+0

да, это устранит мое решение. Решение Тима Питцкера будет работать для вас. – diverscuba23

Смежные вопросы