我想确保我只打印最多80个字符的长行,但我有一个字符串s
,它可以更短,更长。所以我想把它分成行而不用分割任何单词。
长字符串示例:
s = "This is a long string that is holding more than 80 characters and thus should be split into several lines. That is if everything is working properly and nicely and all that. No mishaps no typos. No bugs. But I want the code too look good too. That's the problem!"
我可以设法这样做:
words = s.split(" ")
line = ""
for w in words:
if len(line) + len(w) <= 80:
line += "%s " % w
else:
print line
line ="%s " % w
print line
同样,我可以在while循环中迭代使用s.find(" ")
:
sub_str_left = 0
pos = 0
next_pos = s.find(" ", pos)
while next_pos > -1:
if next_pos - sub_str_left > 80:
print s[sub_str_left:pos-sub_str_left]
sub_str_left = pos + 1
pos = next_pos
next_pos = s.find(" ", pos)
print s[sub_str_left:]
这些都不是很优雅,所以我的问题是,如果有更酷的pythonic方式吗? (也许是正则表达式。)
答案 0 :(得分:14)
答案 1 :(得分:2)
import re
re.findall('.{1,80}(?:\W|$)', s)
答案 2 :(得分:2)
import re
s = "This is a long string that is holding more than 80 characters and thus should be split into several lines. That is if everything is working properly and nicely and all that. No misshaps no typos. No bugs. But I want the code too look good too. That's the problem!"
print '\n'.join(line.strip() for line in re.findall(r'.{1,80}(?:\s+|$)', s))
<强>输出:强>
This is a long string that is holding more than 80 characters and thus should be
split into several lines. That is if everything is working properly and nicely
and all that. No misshaps no typos. No bugs. But I want the code too look good
too. That's the problem!
答案 3 :(得分:0)
你可以尝试这个python脚本
import os, sys, re
s = "This is a long string that is holding more than 80 characters and thus should be split into several lines. That is if everything is working properly and nicely and all that. No misshaps no typos. No bugs. But I want the code too look good too. That's the problem!"
limit = 83
n = int(len(s)/limit)
b = 0
j= 0
for i in range(n+2):
while 1:
if s[limit - j] not in [" ","\t"]:
j = j+1
else:
limit = limit - j
break
st = s[b:i*limit]
print st
b = i*limit