Python:从 JSON 读取正则表达式

标签 python json regex python-2.7

我有一个 JSON 文件,用于存储映射,其中包含正则表达式,如下所示:

"F(\\d)": "field-\\\\1",
"FLR[ ]*(\\w)": "floor-\\\\1",

为了符合标准,我转义了反斜杠,实际的正则表达式应该包含 \d\w\\1

当我使用 json.load() 读取此 JSON 后,我仍然需要对生成的字典进行后处理以获得正确的正则表达式。我需要用 \ 替换 \\。最好的方法是什么?

到目前为止,我尝试了 re.sub()str.replace(),在这两种情况下,不清楚如何在变电站中表示单个反斜杠。

例如,我不明白为什么以下内容不会产生单个反斜杠:

In [76]: "\\\\d".replace("\\\\", "\\")
Out[76]: '\\d'

最佳答案

它确实产生一个反斜杠 - 该反斜杠在显示时被转义。这样做是为了使没有非转义方式显示的字符仍然可以明确地打印 - 否则,您将不知道反斜杠是否意味着转义后面的字符。

这可以通过检查单个字符来证明:

# In a terminal/REPL:
>>>> "\\\\d".replace("\\\\", "\\")[0]
'\\'
>>>> "\\\\d".replace("\\\\", "\\")[1]
'd'
>>>> "\\\\d".replace("\\\\", "\\")[2]
'd'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

在 python 中执行正则表达式的一个技巧:使用原始字符串。如果您在字符串文字的第一个引号之前放置 r,则反斜杠不会转义任何内容(结束引号除外)。 r"\n" 是一个包含两个字符的字符串,一个 \ 和一个 n,相当于 "\\n"。当使用正则表达式和其他需要发送转义序列的东西时,它们非常有帮助。另请参阅:What exactly do “u” and “r” string flags do in Python, and what are raw string literals?

关于Python:从 JSON 读取正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39455366/

相关文章:

python - 使用 Python 确定子目录是否位于已安装的文件系统上

jquery - AJAX URL 和 GET 请求

javascript - 使用 ng-options Angular js 过滤 json 对象

php - Apache 在提供服务之前是否读取锁定文件?

python - MongoEngine vs MongoKit for Django

python - 如何创建具有多个独立 DynamicMap 绘图的 Holoviews 应用程序?

regex - 如何过滤 tortoisehg (Mercurial) 以不显示包含部分字符串的分支?

regex - 将正则表达式与 perl/sed/awk 中的变量字符串匹配

xml - 将 XML 转换为 Json 并从转换后的 Json 中删除 XML 声明

java - 使用正则表达式提取文本的括号