我正在嘗試創建一個正則表達式,它將採用包含空格分隔的單詞的長字符串,並將其分成多達50個以空格或行尾結尾的字符塊。使用正則表達式將文本分成塊?
我第一次想到:(.{0,50}(\s|$))
但只抓住了第一場比賽。然後我想我會添加一個*
到最後:(.{0,50}(\s|$))*
但現在它抓住整個字符串。
我一直在測試here,但似乎無法讓它按需工作。任何人都可以看到我在這裏做錯了嗎?
我正在嘗試創建一個正則表達式,它將採用包含空格分隔的單詞的長字符串,並將其分成多達50個以空格或行尾結尾的字符塊。使用正則表達式將文本分成塊?
我第一次想到:(.{0,50}(\s|$))
但只抓住了第一場比賽。然後我想我會添加一個*
到最後:(.{0,50}(\s|$))*
但現在它抓住整個字符串。
我一直在測試here,但似乎無法讓它按需工作。任何人都可以看到我在這裏做錯了嗎?
這裏,似乎工作:
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)
只需使用你的舊錶達式,用findall。我修改了我的答案。 –
你用什麼來匹配正則表達式? re.findall()
方法應該返回你想要的。
這裏有您需要什麼 - '[^ \ S] {1,50}'。對較小的數字 例如:
>>> text = "Lorem ipsum sit dolor"
>>> splitter = re.compile('[^\s]{1,3}')
>>> splitter.findall(text)
['Lor', 'em', 'ips', 'um', 'sit', 'dol', 'or']
它不使用正則表達式,但你有沒有想過使用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.']
[我想你跳過'g'標誌(https://regex101.com/r/cW5aO9/2) – anubhava
@Abe:也許[這個演示](http://ideone.com/c1jXwD )將有所幫助(這裏是一個[正則表達式演示](https://regex101.com/r/bV8aA1/1))。 –
@anubhava你想要一個額外的括號表達你的表達,然後regex101給你所有的匹配整齊地在一邊。 – Rossiar