Python удаление HTML

Если возможно, избегайте использования dangerouslySetInnerHTML.

Альтернативным решением может быть разбиение вашего текста на массив, а затем рендеринг нового div для каждой «новой строки».

Конечно, вам нужно было бы придумать лучший key для текста, поскольку там мог бы быть дублированный текст - хотя это отдельный вопрос сам по себе.

class Hello extends React.Component {
  constructor(props) {
  	super(props)
    this.state = {
      parsedText: [
        "Some text",
        "More text",
        "Keep on texting"
      ]
    }
  }
	
  render() {
    return <div>{this.state.parsedText.map(text => <div key={text}>{text}</div>)}</div>;
  }
}

ReactDOM.render(
  <Hello/>,
  document.getElementById('container')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

<div id="container">
    <!-- This element's contents will be replaced with your component. -->
</div>

6
задан user29772 28 February 2009 в 22:39
поделиться

7 ответов

Можно использовать регулярное выражение для удаления всех тегов:

>>> import re
>>> s = 'blah blah <a href="blah">link</a>'
>>> re.sub('<[^>]*>', '', s)
'blah blah link'
7
ответ дан 8 December 2019 в 02:08
поделиться

Когда Ваше решение для регулярного выражения врежется в стену, попробуйте это супер легкое (и надежный) программа BeautifulSoup.

from BeautifulSoup import BeautifulSoup

html = "<a> Keep me </a>"
soup = BeautifulSoup(html)

text_parts = soup.findAll(text=True)
text = ''.join(text_parts)
18
ответ дан 8 December 2019 в 02:08
поделиться

Существует также небольшая библиотека, названная stripogram, который может использоваться для снимания некоторых или всех HTML-тэгов.

Можно использовать его как это:

from stripogram import html2text, html2safehtml
# Only allow <b>, <a>, <i>, <br>, and <p> tags
clean_html = html2safehtml(original_html,valid_tags=("b", "a", "i", "br", "p"))
# Don't process <img> tags, just strip them out. Use an indent of 4 spaces 
# and a page that's 80 characters wide.
text = html2text(original_html,ignore_tags=("img",),indent_width=4,page_width=80)

Таким образом, если Вы хотите просто разделить весь HTML, Вы передаете valid_tags = () к первой функции.

Можно найти документацию здесь.

10
ответ дан 8 December 2019 в 02:08
поделиться

Regexs, BeautifulSoup, html2text не работают, если атрибут имеет'>'в нем. Посмотрите “>” (БОЛЬШЕ U+003E - ЧЕМ ЗНАК) позволен в значении атрибута элемента HTML?

'Синтаксический анализатор HTML/XML, которому основанное на ' решение могло бы помочь в таких случаях, например, stripogram предложенный @MrTopf, действительно работает.

Вот находящееся в ElementTree решение:

####from xml.etree import ElementTree as etree # stdlib
from lxml import etree

str_ = 'blah blah <a href="blah">link</a> END'
root = etree.fromstring('<html>%s</html>' % str_)
print ''.join(root.itertext()) # lxml or ElementTree 1.3+

Вывод:

blah blah link END
5
ответ дан 8 December 2019 в 02:08
поделиться

html2text сделает что-то вроде этого.

2
ответ дан 8 December 2019 в 02:08
поделиться

Попробуйте Красивый Суп. Выбросьте все кроме текста.

3
ответ дан 8 December 2019 в 02:08
поделиться
>>> import re
>>> s = 'blah blah <a href="blah">link</a>'
>>> q = re.compile(r'<.*?>', re.IGNORECASE)
>>> re.sub(q, '', s)
'blah blah link'
0
ответ дан 8 December 2019 в 02:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: