регулярное выражение Python для замены строки - PullRequest
1 голос
/ 25 августа 2011

Я хочу заменить части строки, которая содержит следующие слова «$% word $%» Я хочу заменить его значением словаря с соответствующим ключом, равным слову.

Другими словами, если у меня есть строка: "blahblahblah $% word $% blablablabla $% car $%" и словарь {слово: 'wassup', машина: 'toyota'}

Строка будет "бла-бла-бла-ваш-блаблабла-тойота"

Как вы можете реализовать это в python, я думал об использовании замены строк и регулярных выражений.

Ответы [ 3 ]

7 голосов
/ 25 августа 2011

Используйте re.sub с функцией в качестве параметра repl :

import re

text =  "blahblahblah $%word$% blablablabla $%car$%"
words = dict(word="wassup", car="toyota")

def replacement(match):
    try:
        return words[match.group(1)]  # Lookup replacement string
    except KeyError:
        return match.group(0)  # Return pattern unchanged

pattern = re.compile(r'\$%(\w+)\$%')
result = pattern.sub(replacement, text)

Если вы хотите передать таблицу замены во время использования re.sub, используйте functools.partial:

import functools

def replacement(table, match):
    try:
        return table[match.group(1)]
    except:
        return match.group(0)

table = dict(...)
result = pattern.sub(functools.partial(replacement, table), text)

... или класс, реализующий __call__:

class Replacement(object):
    def __init__(self, table):
        self.table = table
    def __call__(self, match):
        try:
            return self.table[match.group(1)]
        except:
            return match.group(0)

 result = pattern.sub(Replacement(table), text)
1 голос
/ 25 августа 2011
import re

text =  "blahblahblah $%word$% blablablabla $%car$%"
words = dict(word="wassup", car="toyota")

regx = re.compile('(\$%%(%s)\$%%)' % '|'.join(words.iterkeys()))

print regx.sub(lambda mat: words[mat.group(2)], text)

результат

blahblahblah wassup blablablabla toyota
0 голосов
/ 25 августа 2011

Модуль re - это тот, который вам нужен.

Возможно, вы захотите пересмотреть свой выбор разделителей.$% может стать проблематичным, поскольку $ является зарезервированным символом в регулярном выражении.Впрочем, до вас, просто не забудьте использовать '\\$' или r'\$' (это необработанная строка. Очень полезно, если вы делаете регулярные выражения в python.) В ваших шаблонах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...