Python:从JSON读取regexps

2024-06-16 13:20:13 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

为了符合标准I对反斜杠进行转义,实际regexp应该包含\d\w\\1

一旦我用JSON.load()读取了这个JSON,我仍然需要对生成的字典进行后期处理,以获得正确的regexp。我需要用\替换\\。最好的办法是什么

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

例如,我不明白为什么下面不产生一个反斜杠:

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

Tags: 文件rejsonfield字典情况loadreplace
1条回答
网友
1楼 · 发布于 2024-06-16 13:20:13

它确实会产生一个反斜杠-显示时会转义该反斜杠。这样做的目的是,没有非转义方式显示的字符仍然可以清晰地打印出来——否则,您将不知道反斜杠是否要转义后面的字符

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

# 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中执行regex的一个技巧是:使用原始字符串。如果将r放在字符串文字的第一个引号之前,反斜杠将不会转义任何内容(结束引号除外)r"\n"是一个包含两个字符的字符串,一个\和一个n,相当于"\\n"。在处理regex和其他需要发送转义序列的东西时,它们非常有用。另见:What exactly do “u” and “r” string flags do in Python, and what are raw string literals?

相关问题 更多 >