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=', '')]
请教一下这该怎么修改?
1
okletswin 2017-10-17 17:45:01 +08:00
2010 年我认真的学习了正则表达式,各种高级特性,复杂字符串解析,但现在发现没什么用处
工作中的数据处理都是以 json 交互,自定义要输出的数据格式 第二个括号了没包括空格,尝试了两下没成功,不打算浪费时间了 我觉得楼主还是看看怎么折腾下数据来源吧 |
2
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', '')]` |
3
Zzzzzzzzz 2017-10-17 20:43:39 +08:00
上 pyparsing 吧
|
5
honmaple OP |
6
tidyoux 2017-10-18 16:02:03 +08:00
中间的部分改成这样:
([^\s]*|[^\s]+.*?[^\s]+) |