Подставка Python n-го совпадения из регулярного выражения - PullRequest
0 голосов
/ 16 декабря 2018

Я использую следующее регулярное выражение:

(ADJECTIVE|NOUN|VERB)

Чтобы найти эти три слова в следующем предложении:

The ADJECTIVE panda walked to the NOUN and then VERB. A nearby NOUN was unaffected by these events.

Я пытаюсь запустить цикл, чтобы получить пользователявходы, которые изменят либо ADJECTIVE, NOUN или VERB:

new = ''
for c, item in enumerate(madlib_regexp.findall(text), 1):
    print(type(c))
    # get user input
    if item[0] == 'A':
        replace = input('Enter an ' + item.lower() + ': ')
    else:
        replace = input('Enter a ' + item.lower() + ': ')

    # replace matches with inputs
    global new
    new = madlib_regexp.sub(replace, text)

Самая большая проблема, с которой я сталкиваюсь, это использование значения "c" в enumerate для единственной замены c-го соответствия для моего цикла.Например, «VERB» будет третьим соответствием в моей строке, поэтому я хочу, чтобы текущий пользовательский ввод заменял только 3-е совпадение.

1 Ответ

0 голосов
/ 17 декабря 2018

Вам просто нужно извлечь значение, которое вы хотите заменить, и использовать новый вызов re.sub для его замены:

import re
matches = madly_regexp.findall(text)
for c, item in enumerate(matches, 1):
    print(type(c))
    # get user input
    if item[0] == 'A':
        replace = input('Enter an ' + item.lower() + ': ')
    else:
        replace = input('Enter a ' + item.lower() + ': ')

    # replace matches with inputs
    text = re.sub(item, replace, text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...