首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在regex中转义双引号,在JSON中,读入Python

问在regex中转义双引号,在JSON中,读入Python
EN

Stack Overflow用户
提问于 2020-04-18 04:18:06
回答 1查看 237关注 0票数 0

我有一个JSON文件,其中包含字符串键,并使用regex字符串作为值:

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

然后在Python中读取该文件:

代码语言:javascript
复制
with open(args.rules, "r") as ruleFile:
    rules = json.loads(ruleFile.read())
...

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

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

给定所需的最终regex字符串,如何更新regex以同时满足JSON语法和Python语法?

EN

回答 1

Stack Overflow用户

发布于 2020-04-18 04:33:34

将评论转化为答案:

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

如果您添加一个忽略大小写标志,那么您的正则表达式可以是github['"][\s]?[:=]?[\s]?['"][0-9a-z]{35,40}['"],这稍微好一点:(例如github"= 'i50phsj4vk5p5hphbat9k63ug2njca1f918zzha",尽管"github“后面的第一个引号(在=或:之前)看起来很奇怪。

通常,您可以从python中想要的东西开始,然后反转它。

代码语言:javascript
复制
$ 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61279986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档