想请教一个标记语言解析的正则表达式

2017-10-17 16:27:41 +08:00
 honmaple
import re

regex = re.compile(r'(^| )=([^\s]*[^\s])=(\B|[\u4e00-\u9fa5])')
text = '=1= = 2= =3 == = 4 = =5=, =6=* =7=三 =8=a =9=='

print(regex.findall(text))

需求: 两个等号之间不能以空格开头或结尾,第一个等号之前只能是空格或者每一行的开始位置,第二个等号之后可以是标点或者汉字或者每一行结束,不能是数字字母下划线

想问一下为什么匹配不到 3 =

期望输出

[('', '1', ''),(' ','3 =','') (' ', '5', ''), (' ', '6', ''), (' ', '7', '三'), (' ', '9=', '')]

实际输出

[('', '1', ''), (' ', '5', ''), (' ', '6', ''), (' ', '7', '三'), (' ', '9=', '')]

请教一下这该怎么修改?

2114 次点击
所在节点    Python
7 条回复
okletswin
2017-10-17 17:45:01 +08:00
2010 年我认真的学习了正则表达式,各种高级特性,复杂字符串解析,但现在发现没什么用处
工作中的数据处理都是以 json 交互,自定义要输出的数据格式

第二个括号了没包括空格,尝试了两下没成功,不打算浪费时间了
我觉得楼主还是看看怎么折腾下数据来源吧
Lincoln12w
2017-10-17 20:39:08 +08:00
匹配不到‘ 3 =’是因为([^\s]*[^\s])里面不能包含空格
尝试了几下, 把‘ 3 =’包括进来,但是不满足最后一个
我的表达式是`regex = re.compile(r'(^| )=(\S(?:\S*|.*?\S))=(\B|[\u4e00-\u9fa5])')`
输出是`[('', '1', ''), (' ', '3 =', ''), (' ', '5', ''), (' ', '6', ''), (' ', '7', '三'), (' ', '8=a =9', '')]`
Zzzzzzzzz
2017-10-17 20:43:39 +08:00
上 pyparsing 吧
secondwtq
2017-10-17 21:07:40 +08:00
@okletswin 正则表达式其实挺有用的,就是得注意啥时候该用啥时候不该用
honmaple
2017-10-18 09:31:36 +08:00
@okletswin 数据源就是这样,想要解析标记语言

@Lincoln12w Thank you,我再试试

@Zzzzzzzzz 多谢提醒
tidyoux
2017-10-18 16:02:03 +08:00
中间的部分改成这样:
([^\s]*|[^\s]+.*?[^\s]+)
honmaple
2017-10-18 23:44:58 +08:00
@tidyoux Thank you.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/398378

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX