2013-11-14 1 views
0

Регулярное выражение, совпадающее на основе нижеMatch строка без пробелов между ними текста, но может иметь ведущие пробелы/нули

  • Это минимум 12 или максимум 13 символов
  • Может иметь начальные пробелы/нули
  • Нет пробелов в строке
  • Не все нули/пространства

  • Правильный матч: "ABCDEFGH IJ» "ABCDEFGHIJKLM"

  • Неправильный Match: "ABCD IJKL"
+1

Вы можете поместить некоторые примеры (текст для разбора и текста для извлечения/обнаружения) –

+0

например: «ABCDEFGHIJ» – user2991913

+0

я полагаю не косого пространства? –

ответ

0

ты говоришь вся строка должна быть 12 или 13 символов long включая лидирующие пробелы? Это будет работать в большинстве регулярных выражений вкусов:

^(?=.{12,13}$)\s*[A-Za-z0-9]+$ 

Я не уверен, о ABAP, хотя. Многие поисковые запросы, которые я нашел, показывают, что он поддерживает lookaheads, но если вы действительно используете стандартные регулярные выражения POSIX, это не сработает. Вероятно, вам придется выполнить проверку длины в отдельном тесте.

UPDATE: Чтобы предотвратить совпадение всех нулей, вам нужно добавить еще один предпросмотр:

^(?=.{12,13}$)(?!0+$)\s*[A-Za-z0-9]+$ 

UPDATE 2: Это просто произошло со мной, что вы, вероятно, не хотят строки например " 000000000" - т.е. все нули плюс начальные пробелы. Это регулярное выражение будет охватывать, что:

^(?=.{12,13}$)(?!\s*0+$)\s*[A-Za-z0-9]+$ 
+0

Он не будет соответствовать всем пробелам, потому что '[A-Za-z0-9] +' должен соответствовать хотя бы одной букве или цифре. Другие требования см. В моем обновлении. –

0

Вы можете использовать это регулярное выражение:

^ *[A-Za-z0-9]{12,13}$ 
+0

Спасибо, но я допускаю только одно ведущее пространство, которое должно допускать несколько ведущих пробелов, например. «ABCDEFGH» – user2991913

+0

@ user2991913: Вы уверены, что это разрешено только 1 раз. У меня есть '^ *', что означает 0 или рудные пробелы. – anubhava

+0

Да, это разрешает только один – user2991913

0
\s*\b[a-zA-Z0-9]{12,13}\b 

Это не требует строку, чтобы быть на свою собственную линию. Если вы на самом деле не волнует соответствие начальной пробельные вы можете избавиться от \s*

+0

Если строки, которые вы соответствуете, находятся в их собственных строках, тогда ответ @ anubhava - это то, что вы хотите. – OGHaza

-1

Вы просто хотите дополнительные начальные пробелы:

\s*[A-Za-z0-9]{12} 
+0

Он специально сказал в комментарии к ответу Анубхавы, что это не ограничивается одним ведущим пространством. – Tobberoth

+0

@Tobberoth глупо меня за то, что просто прочитал вопрос. Изменено '?' На '*'. – Bohemian

+0

Который делает это в копии предыдущих ответов, которые даже не верны в первую очередь. – Tobberoth