首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用regex无法使用JSON从字符串末尾的特殊字符中检索终止符

使用regex无法使用JSON从字符串末尾的特殊字符中检索终止符
EN

Stack Overflow用户
提问于 2021-07-04 11:07:46
回答 1查看 45关注 0票数 1

这个Json字符串的终止符是由!!完成的,但不是在最后一个记录时,这样我就不能通过({.*?}!!)检索所有对应的记录,当我使用({.*?})时,我可以用已完成的值检索所有(但没有)。

JSON

代码语言:javascript
复制
x = {'d':'AAAAA@5##{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}!!AAAAA@6##{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}!!AAAAA@7##{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}'}

格式

代码语言:javascript
复制
x = {'d':'AAAAA@5##{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}
     !!AAAAA@6##{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}
     !!AAAAA@7##{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}'}

Python代码

代码语言:javascript
复制
re.findall(r"(AAAAA@\d+##)({.*?})", x['d'])

结果

代码语言:javascript
复制
 [('AAAAA@5##', '{"pp-0":[{"pp-1": 1000, "pp-3": 1003}'),
 ('AAAAA@6##', '{"pp-0":[{"pp-1": 1000, "pp-3": 1003}'),
 ('AAAAA@7##', '{"pp-0":[{"pp-1": 1000, "pp-3": 1003}')]

当我使用下面的代码时,

代码语言:javascript
复制
re.findall(r"(AAAAA@\d+##)({.*?}!!)", x['d'])

第二结果

代码语言:javascript
复制
 [('AAAAA@5##',
 '{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 
   1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}!!'),
 ('AAAAA@6##',
 '{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 
 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}!!')]

只显示两张唱片

我的预期结果

代码语言:javascript
复制
  [('AAAAA@5##',
  '{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 
   1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}!!'),
 ('AAAAA@6##',
 '{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 
 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}!!'),
   ('AAAAA@7##',
 '{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 
 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}')]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-04 11:18:07

代码语言:javascript
复制
import re

x = {'d':'AAAAA@5##{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}!!AAAAA@6##{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}!!AAAAA@7##{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}'}

# simply split the json by !! using str.split() method
# then find the groups
# group 1 --> (.*##)
# group 2--> ({.*})

[re.findall(r'(.*##)({.*})', i)[0] for i in x['d'].split('!!')]
代码语言:javascript
复制
[('AAAAA@5##',
  '{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}'),
 ('AAAAA@6##',
  '{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}'),
 ('AAAAA@7##',
  '{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}')]

或者完全使用regex

代码语言:javascript
复制
re.findall(r'([^!]+##)({[^!]+})', x['d'])

查找regex解释这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68244091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档