Попытка найти три (точно) последовательные копии любого текста, содержащегося в любой переменной - PullRequest
0 голосов
/ 06 апреля 2019

Домашнее задание.Возможно, я не понимаю вопроса: RegEx - три последовательные копии любого текста, который содержится в переменной независимо от .

Я пробовал это: в переменной независимо от , я пробовал 2 копии и 4 копии.Оба из этих правильно возвращают false. Но версия с 3 копиями также возвращает false , когда должно быть истинным.

<i>whatever</i> = "blahblahblah"<br> re.search("blah{3}", whatever)<br>

Я почти уверен, что мне нужно идти по этому пути, но требуется RegEx.

Уточнение
Его необходимо настроить следующим образом:
<i>whatever</i> = "blah" re.search(<i>whatever</i>{3}, "blahblahblah")

То есть re.search необходимо использовать переменную независимо для текстового шаблона для поиска в заданной строке.Я надеюсь, что это имеет больше смысла.Я все еще работаю над этим.

re.search ( независимо от {3}, "blahblahblah") <- синтаксическая ошибка <br>re.search ( независимо от , "blahblahblah") <- работает, но только для переменной один раз. </p>

Я не уверен в синтаксисе поиска переменной (значения), которая будет там 3 раза.

РЕДАКТИРОВАТЬ
все, что = "бла"
re.search (, что бы то ни было {2}, "blahblahblahblah") возвращается true
Также {2,2}не работает.Это мои лучшие догадки.

1 Ответ

2 голосов
/ 06 апреля 2019

Из вашего обновленного поста кажется, что вы хотите сопоставить любое слово, содержащееся в переменной, ровно три раза и в противном случае совпадение должно произойти, если эта переменная появляется либо один раз или дважды, или четыре раза, или пять раз, или любое большее число раз.

Пусть ваше переменное слово будет 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...