spilitList = re.split(r'\;[\s|\S+|\r|\n|\r\n|][a-zA-Z]', testTEXT)
我想以 [;+一个英文字符] 作为匹配来断,但断开成为列表的内容,每个元素会吃掉[a-zA-Z]这个字符,请问如何修改正则表达式,可以保留[a-zA-Z]这个字符?
1
Jwyt 2022-03-08 20:17:51 +08:00
不要用 split ,用 re.findall
|
2
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'] |
3
ho121 2022-03-08 22:01:57 +08:00 via Android
Positive Lookahead ?
|
4
ho121 2022-03-08 22:03:01 +08:00 via Android
|