Как я могу изменить этот код для форматирования текста? - PullRequest
0 голосов
/ 08 марта 2020
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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...