re.split()分割正则匹配问题(保留字符?)

2022-03-08 19:52:20 +08:00
 uti6770werty
spilitList = re.split(r'\;[\s|\S+|\r|\n|\r\n|][a-zA-Z]', testTEXT)    

我想以 [;+一个英文字符] 作为匹配来断,但断开成为列表的内容,每个元素会吃掉[a-zA-Z]这个字符,请问如何修改正则表达式,可以保留[a-zA-Z]这个字符?

2164 次点击
所在节点    Python
4 条回复
Jwyt
2022-03-08 20:17:51 +08:00
不要用 split ,用 re.findall
ClericPy
2022-03-08 21:56:31 +08:00
以后如果不擅长描述需求, 不如直接举例子... input=xxx, output=yyy, expect=zzz

按字面理解似乎 [] 不是边界, 我大致猜一猜的话

输入='test; 1; abc; def'
输出=['test; 1', 'bc', 'ef']
期望=['test; 1', 'abc', 'def']

简单理解需求就是用了字母做分界, 但是结果里依然要留下这字母. 可以考虑零宽断言, 宽度为 0 就不会被算进去


import re

testTEXT = 'test; 1; abc; def'
print('输入', testTEXT)
print('错误输出', re.split(r'\;[\s|\S+|\r|\n|\r\n|][a-zA-Z]', testTEXT))
print('正确输出', re.split(r';\s*(?=[a-zA-Z])', testTEXT))
# 输入 test; 1; abc; def
# 错误输出 ['test; 1', 'bc', 'ef']
# 正确输出 ['test; 1', 'abc', 'def']
ho121
2022-03-08 22:01:57 +08:00
Positive Lookahead ?
ho121
2022-03-08 22:03:01 +08:00

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

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

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

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

© 2021 V2EX