簡體   English   中英

如何正確地逃避JSON中保留的正則表達式字符?

[英]How to properly escape reserved regex characters in JSON?

我有一個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語法問題?

反斜杠需要在JSON中進行轉義。

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

這里

JSON中保留以下字符,必須正確轉義才能在字符串中使用:

  • 退格鍵\\ b替換
  • 形式進料被替換為\\˚F
  • 換行符替換為\\ n
  • 回車符\\ r \\ n替換
  • Tab替換為\\ t
  • 雙引號替換為
  • 反斜杠替換為\\\\

規則是首先在正確的字典中使用正確的字符串。 並且\\將在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文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM