贪婪的正则表达式每隔第n行拆分python

时间:2015-11-29 01:57:09

标签: python regex string

我的问题与此one类似,但有一些修改。首先,我需要使用python和regex。我的字符串是:'四分和七年前。'我希望每隔6个字符拆分一次,但最后如果字符没有除以6,我想返回空格。

我希望能够输入:'Four score and seven years ago.'

理想情况下,它应输出:['Four s', 'core a', 'nd sev', 'en yea', 'rs ago', '. ']

我能得到的最接近的是这次尝试,它忽略了我的句号并且没有给我空格

re.findall('.{%s}'%6,'Four score and seven years ago.') #split into strings
['Four s', 'core a', 'nd sev', 'en yea', 'rs ago']

3 个答案:

答案 0 :(得分:4)

如果没有正则表达式,这很容易做到:

>>> s = 'Four score and seven years ago.'
>>> ss = s + 5*' '; [ss[i:i+6] for i in range(0, len(s) - 1, 6)]
['Four s', 'core a', 'nd sev', 'en yea', 'rs ago', '.     ']

这会在您要求的末尾提供空白区域。

或者,如果必须使用正则表达式:

>>> import re
>>> re.findall('.{6}', ss)
['Four s', 'core a', 'nd sev', 'en yea', 'rs ago', '.     ']

两种情况下的关键是创建字符串ss,其末尾有足够的空白。

答案 1 :(得分:3)

您没有获得包含句点的最终元素的原因是您的字符串不是6的倍数。因此,您需要将正则表达式更改为一次匹配1到6个字符:

>>> re.findall('.{1,6}','Four score and seven years ago.')
['Four s', 'core a', 'nd sev', 'en yea', 'rs ago', '.']

为了获得最终元素的所需填充,只需使用:

>>> [match.ljust(6, ' ') for match in re.findall('.{1,6}','Four score and seven years ago.')]
['Four s', 'core a', 'nd sev', 'en yea', 'rs ago', '.     ']

答案 2 :(得分:1)

你可以用这个:

>>> re.findall('(.{6}|.+$)', 'Four score and seven years ago.')
['Four s', 'core a', 'nd sev', 'en yea', 'rs ago', '.']