使用正则表达式将文本分成块?

时间:2016-03-14 19:57:27

标签: python regex

我正在尝试创建一个正则表达式,它将包含一个包含空格分隔单词的longish字符串,并将其分成最多50个字符的块,这些字符以空格或行尾结束。

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

我一直在测试here,但似乎无法让它按需要运行。谁能看到我在这里做错了什么?

4 个答案:

答案 0 :(得分:1)

您使用什么来匹配正则表达式? re.findall()方法应返回您想要的内容。

答案 1 :(得分:1)

在这里,似乎有效:

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

re.findall(p, test_str)

答案 2 :(得分:0)

它没有使用正则表达式,但您是否考虑过使用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.']

答案 3 :(得分:-1)

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

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