1

我有一个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

4 回答 4

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 个或多个数字,我将其替换为换行符,后跟匹配的数字(通过捕获组)。

于 2012-12-01T15:44:46.060 回答
1

使用

>>> 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

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

>>> print(re.sub(r'(?<!^)([0-9]+)', r'\n\1', s))
1 blahblahblah 
2 sdsdsdsdsd 
3 uuuuuu 
4 eeee 
5 abcdef
于 2012-12-01T15:45:20.500 回答
1

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

In [62]: print(re.sub(r'\s(\d)', r'\n\1', line))
1 blahblahblah
2 sdsdsdsdsd
3 uuuuuu
4 eeee
5 abcdef
于 2012-12-01T16:09:34.927 回答
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
于 2012-12-01T16:12:34.333 回答