#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. О, хорошо, спасибо за ответ !