在Python中从文件中读取正则表达式

时间:2015-11-18 20:05:12

标签: python regex

我正在尝试使用python从文件中读取一堆正则表达式。

正则表达式位于文件regexes.csv中,每行中有一对,并且用逗号分隔。 e.g。

<\? xml([^>]*?)>,<\? XML$1>
peter,Peter

我在做

detergent = []
infile = open('regexes.csv', 'r')
for line in infile:
    line = line.strip()
    [search_term, replace_term] = line.split(',', 1)
    detergent += [[search_term,replace_term]]

这不会产生正确的输入。如果我打印detergent我得到

['<\\?xml([^>]*?)>', '<\\?HEYXML$1>'],['peter','Peter']]

似乎它正在逃避反斜杠。

此外,在包含的文件中,比如说

<? xml ........>

下面在内容中进一步编写的命令re.sub(search_term,replace_term,file_content)正在将其替换为

<\? XML$1>

因此,$1没有恢复该对的第一个正则表达式中的第一个捕获组。

从文件中输入正则表达式的正确方法是什么,以便稍后在re.sub中使用?

当我在脚本中使用正则表达式时,我会将它们写在r'...'中,但我不确定在阅读文件时会出现什么问题。

1 个答案:

答案 0 :(得分:2)

从文件中读取正则表达式没有任何问题或特殊要求。反斜杠的转义就是python如何表示包含它们的字符串。例如,假设您已在代码中直接将正则表达式定义为rgx = r"\?"。尝试打印它,你会看到它以同样的方式显示...

>>> r"\?"
>>> '\\?'

$1未被替换的原因是因为组引用的语法。正确的语法是\1