在 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
烙印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
添加回答
举报
0/150
提交
取消