def formatText(text, nth=3):
text = text.split()
for i in range(len(text)):
# 1
if ',' in text[i]:
text[i] = "{} {}".format(text[i], text[i+1])
text[i+1] = ''
# 2
if '[' in text[i] and ']' in text[i]:
text[i] = re.sub(r'(\[\w*\])', r'\1\n', text[i])
# 3
if '[' in text[i] and ']' in text[i+1]:
text[i] = "{} {}".format(text[i], text[i+1])
text[i+1] = '\n'
# 4
if '&' in text[i]:
text[i] = "{} {} {}".format(text[i-1], text[i], text[i+1])
text[i-1] = '\n'
text[i+1] = '\n'
# 5
text = list(filter(None, text))
result = ""
index = 0
n = 0
for i in range(len(text)):
n += len(text[i])
# 5
if n > 20:
result += '\n'
index = 0
n = 0
# 6
if text[i] == '\n':
result += "{}".format(text[i])
index -= 1
# 7
elif len(text[i]) == 1 and index == 2:
result += "{} ".format(text[i])
# 8
else:
result += "{} ".format(text[i])
index += 1
# 9
if index == nth:
result += "\n"
index = 0
n = 0
return result
У меня есть эта функция, которая делает почти то, что я хочу.
Но она выглядит ужасно.
Может кто-нибудь помочь мне улучшить мою функцию?
Переменная index
обозначает текущее слово.
Переменная n
обозначает длину текста в строке.
- 1 - ["not", "red,", "but", "green"] => ["not", "red, but", "", "green"]
- 3 - ["[home", "made]", "but", "green"] => ["[home made]", "", "but", "green"]
- 4 - ["bread", "&", "butter", "green"] => ["", "bread & butter", "", "green"]
# - 7 - don't leave one length word as last character on the line
Функция должна отформатировать текст, как мой код делает выше, и добавить новый строка после n-го слова.
Но есть особые случаи, когда добавляется nth+1
слово, если последний символ был одной длиной.
Но это ниже проверки, если n> 20.