Из вашего обновленного поста кажется, что вы хотите сопоставить любое слово, содержащееся в переменной, ровно три раза и в противном случае совпадение должно произойти, если эта переменная появляется либо один раз или дважды, или четыре раза, или пять раз, или любое большее число раз.
Пусть ваше переменное слово будет blah
, тогда вам нужно использовать это регулярное выражение,
(?<!blah)(?:blah){3}(?!blah)
Здесь (?:blah){3}
будет соответствовать blah
ровно три раза, и этот (?<!blah)
отрицательный взгляд позади провалит совпадение, если найденному слову предшествует blah
, а этот (?!blah)
отрицательный взгляд вперед потерпит совпадение, если * За 1016 * следует матч.
Демо
Вот код Python,
import re
arr = ['aablahaa','aablahblahaa','aablahblahblahaa','aablahblahblahblahaa','aablahblahblahblahblahaa']
whatever = "blah"
reg = r"(?<!{})(?:{}){}(?!{})".format(whatever,whatever,'{3}',whatever) # construct regex dynamically using whatever word
for s in arr:
if re.search(reg, s):
print(s, '-->', 'Matched')
else:
print(s, '-->', "Didn't Matched")
Печатает это, где показано, что сопоставляется только строка, содержащая blah
ровно три раза, а все остальные не выполнены.
aablahaa --> Didn't Matched
aablahblahaa --> Didn't Matched
aablahblahblahaa --> Matched
aablahblahblahblahaa --> Didn't Matched
aablahblahblahblahblahaa --> Didn't Matched