我有一个字符串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)
答案 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