我有一个字符串,我想将其拆分为 2 位数的片段。我试过像这样使用正则表达式:
import re
s = "123456789"
t = re.sub('..', ".. ", s)
print(t)
我希望得到 12 34 56 78 9 但我却得到了 '.. .. .. .. 9'。 9 不会打扰我,因为我知道我会有偶数个数字,但是我怎么能告诉 re.sub 不要用点?
使用 python shell 3.5.1
编辑
检查了所有 3 个答案,它们都有效,但 findall 似乎更快(并且更优雅的 IMO ;p ):
import time
import re
s = "43256711233214432"
i = 10000
start = time.time()
while i:
i -= 1
re.sub('(..)', r"\1 ", s)
end = time.time()
elapsed = end - start
print("using r\"\\1 \" : ", elapsed)
i = 10000
start = time.time()
while i:
re.sub('..', r"\g<0> ", s)
i -= 1
end = time.time()
elapsed = end - start
print("using r\"\g<0> \" : ", elapsed)
i = 10000
start = time.time()
while i:
' '.join(re.findall(r'..|.', s))
i -= 1
end = time.time()
elapsed = end - start
print("using findall : ", elapsed)
using r"\1 " : 0.25461769104003906
using r"\g<0> " : 0.09374403953552246
using findall : 0.015610456466674805
第二次编辑:没有正则表达式是否有更好的方法(或任何方法...)?
请您参考如下方法:
你也可以使用re.findall,
>>> s = "123456789"
>>> ' '.join(re.findall(r'..|.', s))
'12 34 56 78 9'
>>>
r'..|.' 正则表达式匹配两个字符或单个字符(优先选择 ..,然后是 .)
