Регулярное выражение в python, которое соответствует слову, содержащему «z», а не в начале или конце слова

#python #regex

Вопрос:

Рассмотрим предложение, в котором будут некоторые слова, которые могут начинаться или заканчиваться на «z», а могут и не начинаться.

Это был мой код :

 reg_9 = re.compile(r'b[^z]w zw [^z]b')
sentence = "this sentence contains zatstart azb pole ab noaz yeszishere z_is_op"
reg_9.findall(sentence)
 

Таким образом, в соответствии с приведенным выше регулярным выражением все строки в пределах границы «b», которая не начинается с » z «и не заканчивается на» z «(это [^z] в начале и в конце), но имеет » z «где-то посередине, которое задается» w zw » в моем регулярном выражении.

В выводе я получаю это :

 [' azb ', ' yeszishere ']
 

Итак, может ли кто-нибудь сказать, почему эти выходные строки состоят из этих дополнительных пробелов в начале и в конце ?

Комментарии:

1. b[^z] Часть вашего регулярного выражения также соответствует пробелам после границы слова.

Ответ №1:

Вам нужно сделать w необязательным, т. е. использовать w* вместо этого. Но я бы сформулировал ваше регулярное выражение так:

 reg_9 = re.compile(r'b[^WzZ]w*zw*[^WzZ]b')
sentence = "this sentence contains zatstart azb pole ab noaz yeszishere z_is_op"
print(reg_9.findall(sentence))  # ['azb', 'yeszishere']
 

Этот шаблон регулярного выражения гласит::

 b       match a word boundary
[^WzZ]  match any word character OTHER than z or Z
w*      zero or more word characters
z        z
w*      zero or more word characters
[^WzZ]  match any word character OTHER than z or Z
b       match a word boundary
 

Комментарии:

1. О, хорошо, спасибо за ответ !