Python中的分割和转义斜杠
我有一个文件,里面包含了类似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]