如何正确地转义JSON中保留的正则表达式字符?

时间:2019-07-10 09:29:03

标签: python json regex

我有一个JSON文件,其中包含一些要在我的python代码中使用的正则表达式。 当我尝试在JSON文件中转义保留的正则表达式字符时,就会出现问题。 当我运行python代码时,它无法处理json文件并引发异常。

我已经调试了代码,并得出结论,调用json.loads(ruleFile.read())时该代码将失败。显然,只有某些字符可以在JSON中转义,而点不是其中的一个会导致语法错误。

try:
    with open(args.rules, "r") as ruleFile:
        rules = json.loads(ruleFile.read())
        for rule in rules:
            rules[rule] = re.compile(rules[rule])
except (IOError, ValueError) as e:
    raise Exception("Error reading rules file")
{
    "Rule 1": "www\.[a-z]{3,10}\.com"
}
Traceback (most recent call last):
  File "foo.py", line 375, in <module>
    main()
  File "foo.py", line 67, in main
    raise Exception("Error reading rules file")
Exception: Error reading rules file

如何解决此JSON语法问题?

2 个答案:

答案 0 :(得分:0)

反斜杠需要在JSON中转义。

{
    "Rule 1": "www\\.[a-z]{3,10}\\.com"
}

来自here

  

以下字符在JSON中保留,并且必须正确   转义用于字符串:

     
      
  • 退格替换为 \ b
  •   
  • 换页替换为 \ f
  •   
  • 换行符被替换为 \ n
  •   
  • 回车替换为 \ r
  •   
  • 标签被替换为 \ t
  •   
  • 双引号被替换为 \“
  •   
  • 反斜杠被替换为 \\
  •   

答案 1 :(得分:0)

规则是首先在正确的字典中包含正确的字符串。并且\将在Python中转义。

所以您首先应该写:

rules = {"Rule 1": r"www\.[a-z]{3,10}\.com"}

然后您可以轻松地将其转换为JSON字符串:

print(json.dumps(rules, indent=4))

{
    "Rule 1": "www\\.[a-z]{3,10}\\.com"
}

您现在知道应该如何格式化包含正则表达式的json文件。