为了账号安全,请及时绑定邮箱和手机立即绑定

插入空格以分隔连接的字母和数字字符串 - Python RegEx

插入空格以分隔连接的字母和数字字符串 - Python RegEx

斯蒂芬大帝 2021-09-02 16:12:46
在 Python 中,我需要创建一个正则表达式,在任何连接的 AlphaNum 组合之间插入一个空格。例如,这就是我想要的:8min15sec ==> 8 min 15 sec7m12s ==> 7 m 12 s15mi25s ==> 15 mi 25 s我在网上找到了解决方案,但它们对我来说太复杂了,无法解析/修改。例如,我有这个:[a-zA-Z][a-zA-Z\d]*但它只标识第一个插入点:8Xmin15sec(X)和这个(?<=[a-z])(?=[A-Z0-9])|(?<=[0-9])(?=[A-Z])但它只找到这一点:8minX15sec(X)我可以确定使用具有完整语法的手来查找每个插入点并插入空格。
查看完整描述

3 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

以下方法如何:


import re


for test in ['8min15sec', '7m12s', '15mi25s']:

    print(re.sub(r'(\d+|\D+)', r'\1 ', test).strip())  

这会给你:


8 min 15 sec 

7 m 12 s 

15 mi 25 s


查看完整回答
反对 回复 2021-09-02
?
烙印99

TA贡献1829条经验 获得超13个赞

您可以使用此正则表达式,它以任一顺序标记数字和字母边界的点,即先数字后字母,反之亦然。


(?<=\d)(?=[a-zA-Z])|(?<=[a-zA-Z])(?=\d)

这个正则表达式(?<=\d)(?=[a-zA-Z])标记一个点,正向前瞻以寻找字母表,正向后向寻找数字。


同样,(?<=[a-zA-Z])(?=\d)执行相同但顺序相反。


然后只需用空格替换该标记。


这是相同的示例python代码。


import re

arr = ['8min15sec', '7m12s', '15mi25s']

for s in arr:

 print (s + ' --> ' + re.sub('(?<=\d)(?=[a-zA-Z])|(?<=[a-zA-Z])(?=\d)', ' ',s))

打印以下输出,


8min15sec --> 8 min 15 sec

7m12s --> 7 m 12 s

15mi25s --> 15 mi 25 s


查看完整回答
反对 回复 2021-09-02
  • 3 回答
  • 0 关注
  • 273 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信