在Python中,我需要创建一个正则表达式,在任何串联的AlphaNum组合之间插入一个空格。例如,这就是我想要的:
8min15sec ==> 8 min 15 sec
7m12s ==> 7 m 12 s
15mi25s ==> 15 mi 25 s
我对在线找到的解决方案感到困惑,但是这些解决方案对于我来说太复杂了,无法解析/修改。例如,我有这个:
[a-zA-Z][a-zA-Z\d]*
但它仅标识第一个插入点:8Xmin15sec(X)
还有这个
(?<=[a-z])(?=[A-Z0-9])|(?<=[0-9])(?=[A-Z])
但它只能找到这一点:8分钟X 15秒(X)
我肯定可以使用具有完整语法的指针来找到每个插入点并插入空格。
RegEx101 demo(与上面相同的链接)
答案 0 :(得分:2)
您可以使用此正则表达式来标记点,该点是数字和字母的边界,其顺序为数字先于字母,字母反之亦然。
(?<=\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
答案 1 :(得分:2)
以下方法如何?
var n = [9, -2, 5, 6, 3, 4, 0];
int minN = n[0];
int maxN = n[0];
n.skip(1).forEach((b) {
minN = minN.compareTo(b) >= 0 ? b : minN;
maxN = maxN.compareTo(b) >= 0 ? maxN : b;
});
print('Max: $maxN'); // Max: 9
print('Min: $minN'); // Min: -2
哪个会给你:
import re
for test in ['8min15sec', '7m12s', '15mi25s']:
print(re.sub(r'(\d+|\D+)', r'\1 ', test).strip())
答案 2 :(得分:1)
怎么样:
"(\d+)([a-zA-Z]+)"
到
"\1 \2 "
https://regex101.com/r/yvqCtQ/2
在python中:
In [59]: re.sub(r'(\d+)([a-zA-Z]+)', r'\1 \2 ', '8min15sec')
Out[59]: '8 min 15 sec '