如何在数字之前拆分字符串

时间:2012-12-01 15:39:51

标签: python regex python-3.x

我有一个字符串1 blahblahblah 2 sdsdsdsdsd 3 uuuuuu 4 eeee 5 abcdef 我想输出

1 blahblahblah
2 sdsdsdsdsd
3 uuuuuu
4 eeee
5 abcdef

我尝试使用\n在每个号码前添加re.split,但它无效

re.split(' (?=[1-9]:)', line)

4 个答案:

答案 0 :(得分:5)

以下工作正常:

re.sub(r'(\d+)', '\n\\1', input)

演示:

>>> print(re.sub(r'(\d+)', r'\n\1', input))

1 blahblahblah 
2 sdsdsdsdsd 
3 uuuuuu 
4 eeee 
5 abcdef

表达式(\d+)匹配1位或更多位数,我将其替换为换行符后跟匹配的数字(通过捕获组)。

答案 1 :(得分:1)

使用group

>>> s = '1 blahblahblah 2 sdsdsdsdsd 3 uuuuuu 4 eeee 5 abcdef'
>>> import re
>>> print(re.sub(r'([0-9]+)', r'\n\1', s))

1 blahblahblah 
2 sdsdsdsdsd 
3 uuuuuu 
4 eeee 
5 abcdef

要删除第一个换行符,您可以添加negative lookbehind

>>> print(re.sub(r'(?<!^)([0-9]+)', r'\n\1', s))
1 blahblahblah 
2 sdsdsdsdsd 
3 uuuuuu 
4 eeee 
5 abcdef

答案 2 :(得分:1)

这是另一种在不在第一个数字之前插入换行符进行替换的方法:

In [62]: print(re.sub(r'\s(\d)', r'\n\1', line))
1 blahblahblah
2 sdsdsdsdsd
3 uuuuuu
4 eeee
5 abcdef

答案 3 :(得分:0)

不使用re

>>> s = '1 blahblahblah 2 sdsdsdsdsd 3 uuuuuu 4 eeee 5 abcdef'
>>> for i,word in zip(*[iter(s.split())]*2):
    i = int(i)
    print('{i} {word}'.format(**locals()))

输出:

1 blahblahblah
2 sdsdsdsdsd
3 uuuuuu
4 eeee
5 abcdef