【发布时间】:2018-10-25 14:02:32
【问题描述】:
我想在配置文件中存储一系列预先测试的正则表达式,并在运行时读取和应用它们。
但是,由于它们通常包含转义字符,所以当我将它们加载到内存中并将它们填充到 dict 中时,它们已经被逃跑致死了。
如何保持我的正则表达式定义的完整性,以便它们可以re.compile?
另外,鉴于许多转义后字符串以带有\x00 字符的形式结束,我如何将它们转换回re.compile 可以正确使用的形式?
例如我已经写在一个文件中,正则表达式"\btest\b"。如果我想将它放入 re.compile,我可以使用re.compile(r"\btest\b") 强制它这样做。但是,我不想手动编写此代码,我想将其从文件中取出,并将其作为变量处理(我这里有 000 个要处理)。
似乎没有办法将r 转换为字符串变量,因此我只能尝试使用'\x08test\x08' 进行编译,但这并不能达到我想要的效果。
这一定是一个相当普遍的问题 - 其他人如何处理这个问题?
【问题讨论】:
-
如果你把
\btest\b写成一个文件中的文字然后读入,它将等于r'\btest\b' -
如何打开文件遍历行并将每一行放入 re.compile ?您能否发布一个示例,您的文件是什么样的?
-
虽然“逃死”只是人类的问题。该程序仍会按预期正常读取文件。例如
\btest\b将被读作\\btest\\b和re.compile()就好了。 -
这不是我发现的——也许是因为我正在通过 csv 库、json 或 pandas 读取文件。我不打算为应该是一个简单的配置解析器编写 io 级代码。似乎 python 以
"\btest\b"开头的方式有很多(re.compile 接受),但一旦它以“\08test\08”形式结束(re.compile 不会 - 至少,它不会) t 以相同的方式解释)似乎没有简单的方法来执行反向操作。 -
@Idlehands 如果我可以强制将文字“转义”到
"\\btest\\b"那么是的,我想这会起作用 - 不幸的是,这似乎不是正在发生的事情。