Использование якорей в регулярных выражениях python для получения точного соответствия

#python #regex

#python #регулярное выражение

Вопрос:

Мне нужно проверить номер версии, состоящий из ‘v’ плюс положительное значение int, и ничего больше, например, «v4», «v1004»

У меня есть

 import re
pattern = "Av(?=d )W"

m = re.match(pattern, "v303")
if m is None:
    print "noMatch"
else:
    print "match"
  

Но это не работает! Удаление A и W будет соответствовать для v303, но также будет соответствовать, например, для v30G

Спасибо

Ответ №1:

Довольно просто. Сначала поместите якоря в свой шаблон:

 "^patternhere$"
  

Теперь давайте соберем шаблон:

 "^vd $"
  

Это должно сделать это.

Ответ №2:

Я думаю, вам может понадобиться b (граница слова), а не A (начало строки) и W (не словесный символ), также вам не нужно использовать lookahead (the (?=...) ).

Попробуйте: "bv(d )" если вам нужно захватить int, "bvd " если вы этого не сделаете.

Редактировать: Вы, вероятно, хотите использовать необработанный строковый синтаксис для регулярных выражений Python, r"bvd b" , поскольку "b" это символ пробела в обычной строке.

Редактировать 2: поскольку является «жадным», завершение не b требуется или не требуется.

Ответ №3:

Просто используйте

  bvd b
  

Или заключил его в ^bvd b$

чтобы полностью соответствовать ему..