转义正则表达式中的双引号,JSON,读入Python

2024-06-26 14:10:25 发布

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

我有一个JSON文件,其中包含字符串键,并使用正则表达式字符串作为值:

{
    "GitHub": "[g|G][i|I][t|T][h|H][u|U][b|B]['|\"][\s]?[:|=]?[\s]?['|\"][0-9a-zA-Z]{35,40}['|\"]"
} 

然后用Python读取该文件:

with open(args.rules, "r") as ruleFile:
    rules = json.loads(ruleFile.read())
...

不幸的是,我无法正确解析正则表达式。它似乎一直被挂在我是如何逃离正则表达式中的双引号的问题上。在当前编写代码时,解释的正则表达式删除了我用来转义每个双引号的反斜杠;我相信反斜杠是在JSON中转义双引号(它只用于转义正则表达式本身的双引号),这会导致代码在读取文件时失败

我尝试在正则表达式字符串中的双引号之前添加一个或两个额外的反斜杠,但是,如果有两个反斜杠,则解释的正则表达式无法读取,如果有三个反斜杠,则读取成功,但保留两个反斜杠

给定所需的最终正则表达式字符串,如何更新正则表达式以同时满足JSON语法和Python语法


Tags: 文件字符串代码githubjsonaswith语法
1条回答
网友
1楼 · 发布于 2024-06-26 14:10:25

将评论变成答案:

首先,我不认为您的正则表达式是您期望的开始,它将匹配:GiT|ub"|'mriDyPKFoVKH7WbvQM3qrjH1LvtYuDYuB6Q' 您应该删除字符类([])中的or(|),因为它被解释为文字垂直条

如果您添加一个ignore case标志,那么您的正则表达式可以是github['"][\s]?[:=]?[\s]?['"][0-9a-z]{35,40}['"],这稍微好一点:(示例github"= 'i50phsj4vk5p5hphbat9k63ug2njca1f918zzha",尽管“github”(before=or:)后面的第一个引号看起来很奇怪

通常,您可以从python中想要的内容开始,然后将其反转

$ python
>>> import json, re
>>> desired = r'''github['"][\s]?[:=]?[\s]?['"][0-9a-z]{35,40}['"]'''
>>> example = "giThuB' ='0123456789012345678901234567890123456789'"

>>> print desired
github['"][\s]?[:=]?[\s]?['"][0-9a-z]{35,40}['"]

>>> print json.dumps({"Github": desired})
{"Github": "github['\"][\\s]?[:=]?[\\s]?['\"][0-9a-z]{35,40}['\"]"}

>>> bool(re.match(desired, example, flags=re.I))
True

相关问题 更多 >