我正在尝试使用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'...'
中,但我不确定在阅读文件时会出现什么问题。
答案 0 :(得分:2)
从文件中读取正则表达式没有任何问题或特殊要求。反斜杠的转义就是python如何表示包含它们的字符串。例如,假设您已在代码中直接将正则表达式定义为rgx = r"\?"
。尝试打印它,你会看到它以同样的方式显示...
>>> r"\?"
>>> '\\?'
您$1
未被替换的原因是因为不组引用的语法。正确的语法是\1
。