我有一个 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/