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

最初の改行を削除するには、否定の後読みを追加します。

>>> 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 に答える