我有一个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)
我有一个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)
以下工作正常:
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 个或多个数字,我将其替换为换行符,后跟匹配的数字(通过捕获组)。
使用组:
>>> 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
这是另一种在第一个数字之前不插入换行符的替换方法:
In [62]: print(re.sub(r'\s(\d)', r'\n\1', line))
1 blahblahblah
2 sdsdsdsdsd
3 uuuuuu
4 eeee
5 abcdef
不使用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