开发者社区> 问答> 正文

如何从一个字符串段中提取子串集

一码平川MACHEL 2019-01-23 13:40:20 669

有一个字符串:

output='[{ "id":"b678792277461" ,"Responses":{"SUCCESS":{"sh xyz":"sh xyz\n Name Age Height Weight\n Ana \u003c15 \u003e 163 47\n 43\n DEB \u003c23 \u003e 155 \n Grey \u003c53 \u003e 143 54\n 63\n Sch#"},"FAILURE":{},"BLACKLISTED":{}}}]'
这只是一个例子,但我有更长的输出,这是来自api调用的响应。我想提取所有名称(ana, dab, grey)并放入一个单独的列表。我该怎么做?

json_data = json.loads(output)

json_data = [{'id': 'b678792277461', 'Responses': {'SUCCESS': {'sh xyz': 'sh xyzn Name Age Height Weightn Ana <15 > 163 47n 43n DEB <23 > 155 n Grey <53 > 143 54n 63n Sch#'}, 'FAILURE': {}, 'BLACKLISTED': {}}}]
1)我试过了 re.findall('\n(.+)\u',output)

但这不起作用,因为它说“不完整的序列u”

2)

start = output.find('\n')
end = output.find('\u', start)
x=output[start:end]
但我无法弄清楚如何在循环中运行这段代码来提取名称

Shell API
分享到
取消 提交回答
全部回答(1)
  • 一码平川MACHEL
    2019-07-17 23:26:35

    u对象不是一个字母,它不能匹配。它是Unicode序列的一部分。以下正则表达式有效,但它有点古怪。除了第一行之外,它会查找每行的开头,直到第一个空格。

    output = json_data0'SUCCESS'

    pattern = "ns*([a-z]+)s+"
    result = re.findall(pattern, output, re.M | re.I)

    ['Name', 'Ana', 'DEB', 'Grey']

    模式说明:

    从一个新行开始( n)
    跳过所有空格,如果有的话( s *)
    收集一个或多个字母([az] +)
    至少跳过一个空格( s +)
    不幸的是,"Name"也被认为是一个名字。如果您知道它始终存在于第一行中,请对结果列表进行切片:

    result[1:]

    ['Ana', 'DEB', 'Grey']

    0 0

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程