【问题标题】:Proper escape when using regex in JSON (trying to create a spaCy pattern matching file)在 JSON 中使用正则表达式时正确转义(尝试创建 spaCy 模式匹配文件)
【发布时间】:2021-04-05 11:19:27
【问题描述】:

如何获取此字符串的 JSON 以接受还包含特殊字符 ("\") 的正则表达式?我已经尝试了几件事,但似乎无法使其正常工作。我正在尝试创建一个 spaCy 模式 jsonl 文件,但由于该 regx 和特殊字符,它一直在这条线上呕吐。只是这样的情况不起作用。显然是用户错误,我似乎无法弄清楚如何正确转义它,以便正确解析。任何意见或帮助将不胜感激。

For this part (?i)SER+-\d+ I have tried escaping (?i)SER+-\\d+ or (?i)SER+-\\\d+ but it doesn't work. 
import json

s = '{"label":"PRODUCT", "pattern": [{"TEXT": {"TEXT": {"REGEX": "(?i)SER+-\d+"}}]}'

print(s)
# parse x:
y = json.loads(s)

【问题讨论】:

  • s = '{"label":"PRODUCT", "pattern": [{"TEXT": {"TEXT": {"REGEX": "(?i)SER+-\\\d+"}}}]}' ? (我猜你错过了一个结束}
  • 你想用[{"TEXT": {"TEXT": {"REGEX":实现什么?

标签: python json regex spacy


【解决方案1】:

您应该使用r 前缀声明字符串文字并使用双反斜杠来定义正则表达式转义序列:

import json
s = r'{"label":"PRODUCT", "pattern": [{"TEXT": {"REGEX": "(?i)SER+-\\d+"}}]}'
print(s)
# => {"label":"PRODUCT", "pattern": [{"TEXT": {"REGEX": "(?i)SER+-\\d+"}}]}
y = json.loads(s)
print(y)
# => {'label': 'PRODUCT', 'pattern': [{'TEXT': {'REGEX': '(?i)SER+-\\d+'}}]}
print(y["pattern"][0]["TEXT"]["REGEX"])
# => (?i)SER+-\d+

请参阅online Python demo。我相信您确实想要"pattern": [{"TEXT": {"REGEX": "(?i)SER+-\\d+"}}],如果您认为您还需要一个嵌套的TEXT,只需将其添加回来。

请注意,打印y 值时看到的双反斜杠实际上是单个反斜杠,这就是为什么我添加了print(y["pattern"][0]["TEXT"]["REGEX"]) 行来证明这一点。

【讨论】:

  • 感谢@Wiktor。做到了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-20
  • 2017-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多