在Python中拆分和转义正斜杠

时间:2011-10-10 20:10:20

标签: python regex replace escaping

我有一个包含/pattern/replace/形式的perl样式正则表达式的文件,我试图将其作为已编译模式及其相关替换字符串的列表读入Python。以下是我到目前为止所做的工作。

def get_regex(filename):
    regex = []
    fi = open(filename,'r')
    text = [l for l in fi.readlines() if not l.startswith("#")]
    fi.close()
    for line in text:
        ptn, repl = line[1:].split('/')[:-1]
        regex.append((re.compile(ptn), repl))
    return regex

这非常有效,直到我得到带有转义正斜杠的行,如下所示:

/$/ <\\/a>/

当我尝试拆分此字符串时,Python会返回一个包含三个元素的列表['$', ' <\\', 's>'],而不是(希望的)['$', ' <\\/s>']。有没有办法让replace解释逃脱?

1 个答案:

答案 0 :(得分:3)

不是,不。你最好的选择可能是使用re.split()代替,使用一个使用lookbehind的正则表达式来确保不转义正斜杠,例如。

UNESCAPED_SLASH_RE = re.compile(r'(?<!\\)/')
ptn, repl = UNESCAPED_SLASH_RE.split(line[1:])[:-1]