Python中的分割和转义斜杠

0 投票
1 回答
3909 浏览
提问于 2025-04-17 04:02

我有一个文件,里面包含了类似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 个回答

3

其实不是这样。你最好的选择可能是使用 re.split(),并配合一个正则表达式,这个表达式会用到“向后查找”,这样可以确保前面的斜杠没有被转义,比如:

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

撰写回答