【问题标题】:Convert random sequence of characters to JSON将随机字符序列转换为 JSON
【发布时间】:2018-02-25 02:12:28
【问题描述】:

我有一长串这种格式的后续字符串(或任何你可以称呼它的名称):

"(str10, str20, str30), (str11, str21, str31), (str12, str22, str32), ..."

括号内的所有字符串都用单引号括起来。

我想将整个字符串转换为 JSON,提取括号内的所有字符串作为值,并为它们分配一个特定的键。因为我只知道 JS 和 Python(而且我显然不是专业人士),所以我尝试用正则表达式来做。然而,问题是 JS 不能将上面的列表(或任何你可能称之为的)识别为字符串。由于列表太长,手动添加转义字符是不切实际的。所以,我不知道该怎么做......

是否有一种通用的方法(可能是合适的语言、某个库或某物)来搜索这些模式并提取它们?谢谢!

我的尝试

/([A-Z]{2})',\s'(.+)',\s'(.+)/g

示例列表

"""
('AD', 'Andorra', 'Hola'),
('AE', 'United Arab Emirates', 'Marhaba'),
('AF', 'Afghanistan', 'Senga yai'),
('AG', 'Antigua and Barbuda', 'Hello'),
('AI', 'Anguilla', 'Hello'),
('AL', 'Albania', 'Tungjatjeta'), ...
"""

预期输出

[{"key1": "AD", "key2": "Andorra", "key3": "Hola"},
  {"key1": "AE", "key2": "United Arab Emirates", "key3": "Marhaba"},
  {"key1": "AF", "key2": "Afghanistan", "key3": "Senga yai"},
  {"key1": "AG", "key2": "Antigua and Barbuda", "key3": "Hello"},
  {"key1": "AI", "key2": "Anguilla", "key3": "Hello"},
  {"key1": "AL", "key2": "Albania", "key3": "Tungjatjeta"}, ...
]

【问题讨论】:

  • 你可以用 "), (" 分割,你会得到一个组合字符串 "str10, str20, str30" 的数组。进一步你可以用 "," 再次分割它得到 str10, str20 , 和 str30 分开。假设整个文档中的模式是相同的
  • 预期结果。
  • @S.Jovan 预期的结果应该是这样的。像这样:[{“key1”:str10,“key2”:str20,“key3”:str30},{“key1”:str11,“key2”:str21,“key3”:str31},{“key1”:str12 , "key2": str22, "key3": str32 }, ... ]
  • @KendrickKesley 文档太长,无法手动拆分。有没有办法自动化这个?
  • @S.Jovan 在 js 语法中,这个正则表达式 /([A-Z]{2})',\s'(.+)',\s'(.+)/g 查找所有出现并适当地分组它们。一个例子是 ('VA', 'Holy See (Vatican City State)', 'Buon giorno')

标签: python json regex string


【解决方案1】:

使用re.sub() 和正则表达式。

正则表达式\(\s*'([^']+)'[^']+'([^']+)'[^']+'([^']+)'\s*\)

替换:{"key1": "\1", "key2": "\2", "key3": "\3"}

Python 代码

r = r"\(\s*'([^']+)'[^']+'([^']+)'[^']+'([^']+)'\s*\)"
sub = r'{"key1": "\1", "key2": "\2", "key3": "\3"}'

json = "[%s]" % re.sub(r, sub, text)

输出:

[{"key1": "str10", "key2": "str20", "key3": "str30"}, {"key1": "str11", "key2": "str21", "key3": "str31"}, {"key1": "str11", "key2": "str21", "key3": "str31"}]

Code demo

【讨论】:

    猜你喜欢
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    相关资源
    最近更新 更多