我有一个JSON文件,其中包含字符串键,并使用regex字符串作为值:
{
"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中的双引号(它只用于转义正则表达式本身的双引号),这会导致代码在读取文件时失败。
我尝试在regex字符串中的双引号之前添加一个或两个额外的反斜杠,但是,如果有两个反斜杠,解释后的正则表达式无法读取,如果有三个,则读取成功,但保留了两个反斜杠。
给定所需的最终regex字符串,如何更新regex以同时满足JSON语法和Python语法?
发布于 2020-04-18 04:33:34
将评论转化为答案:
首先,我不认为您的正则表达式是您期望的开始,它将匹配:GiT|ub"|'mriDyPKFoVKH7WbvQM3qrjH1LvtYuDYuB6Q'您应该删除字符类([])中的或(|),因为它被解释为文字竖线。
如果您添加一个忽略大小写标志,那么您的正则表达式可以是github['"][\s]?[:=]?[\s]?['"][0-9a-z]{35,40}['"],这稍微好一点:(例如github"= 'i50phsj4vk5p5hphbat9k63ug2njca1f918zzha",尽管"github“后面的第一个引号(在=或:之前)看起来很奇怪。
通常,您可以从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))
Truehttps://stackoverflow.com/questions/61279986
复制相似问题