Python 正则分割字符串保留分隔符

2019-11-20 20:39:54 +08:00
 sunhk25
    s='123AA456B789AAA'
    # 想分割成:123AA 456B 789AAA
3090 次点击
所在节点    Python
7 条回复
xpresslink
2019-11-20 20:58:31 +08:00
非要用 split 么?
>>> s='123AA456B789AAA'
>>> import re
>>> re.findall('\d+[AB]+',s)
['123AA', '456B', '789AAA']
sunhk25
2019-11-20 21:22:52 +08:00
@xpresslink 怎么都可以,不过分隔符 AA B AAA 都是不固定的
ddzzhen
2019-11-20 21:37:17 +08:00
分割的依据都没说,你指望得到解决方案?
sunhk25
2019-11-20 22:40:08 +08:00
@ddzzhen AA B AAA 是指定的分隔符,长度优先
ksedz
2019-11-20 22:46:50 +08:00
split 的话大概是这样,如果要连起来,像#1 说的 findall 比较好

```python
In [1]: import re

In [2]: s = '123AA456B789AAA'

In [3]: re.split(r"[AB]", s)
Out[3]: ['123', '', '456', '789', '', '', '']

In [4]: re.split(r"([AB])", s)
Out[4]: ['123', 'A', '', 'A', '456', 'B', '789', 'A', '', 'A', '', 'A', '']

In [5]: re.split(r"([AB]+)", s)
Out[5]: ['123', 'AA', '456', 'B', '789', 'AAA', '']
```
cherbim
2019-11-20 23:40:55 +08:00
要是分隔符只为字母,建议正则
necomancer
2019-11-21 00:13:42 +08:00
一楼答案没毛病啊
In [1]: re.findall(r"\d+[A-Z]+", s)
Out[1]: ['123AA', '456B', '789AAA']

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

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

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

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

© 2021 V2EX