Преобразование строки Python с вкладками / отступами в вывод списка HTML - PullRequest
0 голосов
/ 21 мая 2018

У меня есть следующая строка в качестве примера:

>>> a
'The Distribution as follows:\n\t\t- 71% as follows:\n\t\t\tfirst, to A;\n\t\t\tsecond, to B;\n\t\t\tthird, to C, D, and E as follows:\n\t\t\t\t- 15% to C\n\t\t\t\t- 85% to D and E.\n\t\t- 29% to F.'
>>> print a
The Distribution as follows:
    - 71% as follows:
        first, to A;
        second, to B;
        third, to C, D, and E as follows:
            - 15% to C
            - 85% to D and E.
    - 29% to F.

Мне нужно преобразовать такую ​​строку в вывод HTML, который будет выглядеть следующим образом:

<span style="display:block; font: 13px 'Times New Roman'">The Distribution as follows:<br>
<ul style="display:block; list-style-type:none; line-height: 17px; font: 13px 'Times New Roman';">
    <li>- 71% as follows:</li>
    <ul style="display:block; list-style-type:none; line-height: 17px; font: 13px 'Times New Roman';"> 
        <li>first, to A;</li>
        <li>second, to B;</li>
        <li>third, to C, D, and E as follows:</li>
        <ul style="display:block; list-style-type:none; line-height: 17px; font: 13px 'Times New Roman';">
            <li>- 15% to C</li>
            <li>- 85% to D and E.</li>
        </ul>
     </ul>
     <li>- 29% to F.</li>
     </ul>
</span>

Будет определен CSSотдельно, это временное решение для тестирования.Кроме того, мне нужно заменить черточки сплошными маркерами на втором уровне и полыми маркерами на третьем уровне и т. Д., Если они многоуровневые.Например:

- X% as follows:
    * Y% as follows:
        o Z% as follows:
            - A% as follows:

У меня есть эта итерация, которая работала, когда каждая строка была обернута в теги <p> с динамическим left-padding;однако мне нужно преобразовать все мои теги <p>, где такие элементы списка должны иметь элементы списка HTML.В некоторых случаях это не работает, например, в приведенном выше примере, где строка 29% является частью первого отступа (мой код выравнивает его по сравнению с предыдущей строкой, так как в конце он пишет </ul>. Это также не 'не обращаю внимания на мою черту / сплошную пулю / полую пулю.

        if '\t' in a:
            a= a.replace('\n', '<br>', 1)
            a= a.replace('\n', '</li>')
            tabs = get_tabs(gp_ln)
            tabs.sort(reverse=True)
            for tab in tabs:
                a= a.replace(tab, '\n<ul style="display:block; list-style-type:none; line-height: 17px; '
                                           'font: 13px \'Times New Roman\';">\n<li>', 1)
                a= a.replace(tab, '\n<li>')

            a+= '</li>'
            a+= '</ul>' * len(tabs) + '\n'

Поскольку я работаю над всеми крайними случаями, я не могу не задаться вопросом, есть ли гораздо более простое решение. Я неЯ тоже мало знаю о HTML, поэтому открыт для всех предложений. Я бы предпочел не использовать внешние (не встроенные) библиотеки Python.

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