【问题标题】:Clean method for storing regex strings in python在python中存储正则表达式字符串的干净方法
【发布时间】: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\\bre.compile() 就好了。
  • 这不是我发现的——也许是因为我正在通过 csv 库、json 或 pandas 读取文件。我不打算为应该是一个简单的配置解析器编写 io 级代码。似乎 python 以"\btest\b" 开头的方式有很多(re.compile 接受),但一旦它以“\08test\08”形式结束(re.compile 不会 - 至少,它不会) t 以相同的方式解释)似乎没有简单的方法来执行反向操作。
  • @Idlehands 如果我可以强制将文字“转义”到"\\btest\\b" 那么是的,我想这会起作用 - 不幸的是,这似乎不是正在发生的事情。

标签: python regex escaping


【解决方案1】:

正如评论所说,没有必要做任何特别的事情。

想象一个名为 regexps.txt 的 utf-8 编码文本文件,每行有一个正则表达式,然后从该文件创建一个已编译的正则表达式列表,如下所示:

with open('regexps.txt', encoding='utf8') as f:
    compiled_regexps = [re.compile(line) for line in f]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 2012-12-24
    • 2012-05-28
    • 2016-10-31
    相关资源
    最近更新 更多