使用正则表达式将文本分解为块



我正在尝试创建一个正则表达式,该正则表达式将采用一个包含空格分隔单词的长字符串,并将其分解为最多 50 个字符的块,以空格或行尾结尾。

我首先想出了:(.{0,50}(s|$)),但这只抓住了第一场比赛。 然后我想我会在末尾添加一个*(.{0,50}(s|$))*但现在它抓住了整个字符串。

我一直在这里测试,但似乎无法让它根据需要工作。 谁能看出我在这里做错了什么?

在这里,它似乎正在工作:

import re
p = re.compile(ur'(.{0,50}[s|$])')
test_str = u"jasdljasjdlk jal skdjl ajdl kajsldja lksjdlkasd jas lkjdalsjdalksjdalksjdlaksjdk sakdjakl jd fgdfgdfgnhgkjd fdkfhgk dhgkjhdfhg kdhfgk jdfghdfkjghjf dfjhgkdhf hkdfhgkj jkdfgk jfgkfg dfkghk hdfkgh d asdada ndkjfghdkhg khdfkghkd hgkdfhgkdhfk k dfghkdfgh dfgdfgdfgdn"
re.findall(p, test_str)

你用什么来匹配正则表达式?re.findall()方法应返回所需的内容。

它没有使用正则表达式,但是你有没有考虑过使用textwrap.wrap()

In [8]: import textwrap
        text = ' '.join([
           "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed et convallis",
           "lectus. Quisque maximus diam ut sodales tincidunt. Integer ac finibus",
           "elit. Etiam tristique euismod justo, vel pretium tellus malesuada et.",
           "Pellentesque id mattis eros, at bibendum mauris. In luctus lorem eget nisl",
           "sagittis sollicitudin. Aenean consequat at lacus at porttitor. Nunc sit",
           "amet neque eu sem venenatis rutrum. Proin sed tempus lacus, sit amet porta",
           "velit. Suspendisse et semper nisl, eu varius orci. Ut non metus."])
In [9]: textwrap.wrap(text, 50)
Out[9]: ['Lorem ipsum dolor sit amet, consectetur adipiscing',
        'elit. Sed et convallis lectus. Quisque maximus',
        'diam ut sodales tincidunt. Integer ac finibus',
        'elit. Etiam tristique euismod justo, vel pretium',
        'tellus malesuada et. Pellentesque id mattis eros,',
        'at bibendum mauris. In luctus lorem eget nisl',
        'sagittis sollicitudin. Aenean consequat at lacus',
        'at porttitor. Nunc sit amet neque eu sem venenatis',
        'rutrum. Proin sed tempus lacus, sit amet porta',
        'velit. Suspendisse et semper nisl, eu varius orci.',
        'Ut non metus.']

这是你需要的 - '[^\s]{1,50}'。较小数字的示例:

>>> text = "Lorem ipsum sit dolor"
>>> splitter = re.compile('[^s]{1,3}')
>>> splitter.findall(text)
['Lor', 'em', 'ips', 'um', 'sit', 'dol', 'or']

最新更新