Я новичок в Python и довольно плохо с регулярным выражением. Мое требование - изменить шаблон в существующем коде
Я извлек код, который пытаюсь исправить.
def replacer_factory(spelling_dict):
def replacer(match):
word = match.group()
return spelling_dict.get(word, word)
return replacer
def main():
repkeys = {'modify': 'modifyNew', 'extract': 'extractNew'}
with open('test.xml', 'r') as file :
filedata = file.read()
pattern = r'\b\w+\b' # this pattern matches whole words only
#pattern = r'[\'"]\w+[\'"]'
#pattern = r'["]\w+["]'
#pattern = '\b[\'"]\w+[\'"]\b'
#pattern = '(["\'])(?:(?=(\\?))\2.)*?\1'
replacer = replacer_factory(repkeys)
filedata = re.sub(pattern, replacer, filedata)
if __name__ == '__main__':
main()
Ввод
<fn:modify ele="modify">
<fn:extract name='extract' value="Title"/>
</fn:modify>
Ожидаемый вывод , Обратите внимание, что слова замены могут быть заключены в одинарные или двойные кавычки.
<fn:modify ele="modifyNew">
<fn:extract name='extractNew' value="Title"/>
</fn:modify>
Существующий шаблон r'\b\w+\b'
приводит, например, <fn:modifyNew ele="modifyNew">
, но я ищу это <fn:modify ele="modifyNew">
Шаблоны, которые я пробовал до сих пор, приведены в качестве комментариев. Поздно я понял, что некоторые из них неправильны, поскольку строковые литералы с префиксом r
предназначены для специальной обработки backsla sh et c. Я все еще включаю их в обзор того, что я пытался сделать до сих пор.
Было бы замечательно, если бы я мог получить образец для решения этой проблемы, а не менять логи c. Если это невозможно сделать с помощью существующего кода, пожалуйста, укажите на это. В среде, в которой я работаю, Python 2,6
Любая помощь приветствуется.