Как заменить следующие три символа? - PullRequest
0 голосов
/ 16 марта 2019

Если шаблон содержит символы 'ai' или 'hi', замените следующие три символа на * \ *

string = """
Or help one fainting robin
Unto his nest again,
I shall not live in vain
"""

Вывод должен быть:

Или помоги одному фай * * * нг Робин
Привет * \ * Есть снова,
Я не буду жить напрасно.

Ответы [ 3 ]

6 голосов
/ 16 марта 2019

Использование re.sub:

re.sub(r"([ah]i).{3}", r"\1*/*", string)
1 голос
/ 16 марта 2019

Вам необходимо проверить, является ли текущий символ "a", а следующий - "i" или другой опцией ("h" и "i").

Давайте сделаем код:

string = "Or help one fainting robin Unto his nest again, I shall not live in vain"
string_new = string.split()

>>> string_new
['Or', 'help', 'one', 'fainting', 'robin', 'Unto', 'his', 'nest', 'again,', 'I', 'shall', 'not', 'live', 'in', 'vain']

for phrase in string_new:
    for i in range(len(phrase)):
        if (phrase[i] == "a" and phrase[i+1] == "i") or (phrase[i] == "h" and phrase[i+1] == "i"):
            print(phrase)

Я разделил строку на новую строку (убрал пробелы в строку и другую, получив в результате вектор строк).

Далее я запускаю векторную строку за строкой с первым for. Со вторым я запускаю всю строку char за char. Затем я делаю некоторые проверки, чтобы определить, есть ли в моей строке "ai" или "hi". Если в строке есть некоторые из этих символов, я их печатаю.

Теперь вам нужно только изменить соответствующий символ на нужный вам символ

1 голос
/ 16 марта 2019

Попробуйте

import re

strings_to_find = ['ai', 'hi']

data = 'Or help one fainting robin Unto his nest again'
for string_to_find in strings_to_find:
    offsets = [m.start() for m in re.finditer(string_to_find, data)]
    for offset in offsets:
        data = data[:offset + len(string_to_find)] + '*\*' + data[offset + len(string_to_find) + 3:]
print(data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...