2015-11-30 2 views
-1

У меня возникли проблемы с совпадением начала и конца регулярного выражения на Python. По существу я запутался о когда использовать границы слов /b и начало/конец якорь ^ $Regex с начальным и конечным совпадением

Мое регулярное выражением из

^[A-Z]{2}\d{2} 

матчи 4 буквенных символов (две заглавных букв, две цифры), который является то, что я «м после того, как

спичек AJ99, RD22, CP44 и т.д.

Однако я также отметил, что AJAJAJAJAJAJAJAJAJSJHS99 может быть сопоставлен, а также. Я попытался использовать^и $ вместе, чтобы соответствовать всей строке. Это не работает

^[A-Z]{2}\d{2}$ # this doesn't work 

но

^[A-Z]{2}\d{2} # this is fine 
[A-Z]{2}\d{2}$ # this is fine 

Строка Я сопоставления с длиной 4 символа, но в первых двух примерах регулярное выражение может выбрать начало и конец длинной строки соответственно.

s = "NZ43" # 4 characters, match perfect! However.... 
s = "AM27272727" # matches the first example 
s = "HAHSHSHSHDS57" # matches the second example 
+7

Можете ли вы привести пример строки, которая терпит неудачу? Фактически некоторые, которые терпят неудачу, и некоторые, которые преуспевают, помогут. –

+1

Что именно вы хотите совместить? размещение некоторых выборочных входов и их совпадений помогло бы многим. –

+2

да, тот выглядит правильно. В чем проблема? –

ответ

3

Положение якоря ^ и $ место ограничение на положение ваших соответствующих символов:

Анализируя ваше полное регулярное выражение:

^[A-Z]{2}\d{2}$ 
  • ^ матчи только в начале текст
  • [A-Z]{2} ровно 2 прописных Ascii буквенные символы
  • \d{2} ровно 2 цифры (что эквивалентно [0-9]{2}) только
  • $ матчи в конце текста

Если удалить один или оба положения якоря 2 (^ или $) вы может соответствовать подстроке, начиная с начала или конца, как указано выше.

Если вы хотите, чтобы точно соответствовать слово без использования начало/конец строки используйте \b якорь, например:

``\b[A-Z]{2}\d{2}\b`` 
  • \b матчи на старте/конец текста и между а regex Слово (в регулярном выражении слово char \w предназначено как один из [a-zA-Z0-9_]) и один знак не в группе слов (доступен как \W).

Регулярное выражение выше соответствуетWS24 во всех следующих строках:

  • WS24 одна
  • before WS24
  • WS24 after
  • before WS24 after
  • NZ43

Это не соответствует:

  • AM27272727 (он будет делать, если это AM27 272727 или AM27"272727
  • HAHSHSHSHDS57 (он будет делать, если HAHSHSHSH DS75 или ... вы получите его)

A demo online (сайт будет полезен и для экспериментов с регулярным выражением).

0

Тот факт, что ваше поведение показалось таким, каким оно должно быть, ваш вопрос предполагает, что вы, возможно, не полностью поняли, как работают регулярные выражения.

В дополнение к очень хорошему и информативному ответу GsusRecovery, сайт here - это сайт, который поможет вам понять концепции регулярных выражений и попытается научить вас основам с помощью учебной системы. Чтобы быть ясным, я не хочу рекламировать этот веб-сайт, так как их много, но, тем не менее, я мог действительно использовать этот, и поэтому я предлагаю его.

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