У меня есть следующая строка в качестве примера:
>>> 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.