2015-09-09 3 views
2

У меня есть строка, как показано ниже, которая содержит китайский:Как заменить элементы html в строке на python?

'<span class=H>宜家</span><span class=H>同款</span> 世纪宝贝儿童餐椅婴儿餐椅宝宝餐椅婴儿吃饭椅' 

Теперь я хотел бы, чтобы удалить все HTML элементы этой строки, как и ожидалось:

'宜家同款世纪宝贝儿童餐椅婴儿餐椅宝宝餐椅婴儿吃饭椅' 

Могу ли я узнать, как сделать это, python и re? большое спасибо!

ответ

5

Это что-то тривиальное решить с BeautifulSoup HTML парсером:

>>> from bs4 import BeautifulSoup 
>>> 
>>> data = '<span class=H>宜家</span><span class=H>同款</span> 世纪宝贝儿童餐椅婴儿餐椅宝宝餐椅婴儿吃饭椅' 
>>> soup = BeautifulSoup(data) 
>>> soup.text 
'宜家同款 世纪宝贝儿童餐椅婴儿餐椅宝宝餐椅婴儿吃饭椅' 
+0

Это хорошее решение. Я просто решил использовать регулярное выражение, и я не получил правильного решения. Большое спасибо, я попробую это. –

1

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

\s*<[^>]+>\s* 

например:

p = re.compile('\s*<[^>]+>\s*') 
p.sub('', '<span class=H>宜家</span><span class=H>同款</span> 世纪宝贝儿童餐椅婴儿餐椅宝宝餐椅婴儿吃饭椅') 

Отказ от ответственности er: Это ни в коем случае не будет обрабатывать все возможные варианты легального HTML, но, пока все входные данные будут такими же простыми, как данные в вашем примере, он будет работать. При необходимости вы можете внести изменения в шаблон, чтобы обрабатывать несколько более сложные входы. Однако, если вы намерены обрабатывать любой хорошо сформированный HTML-документ в качестве входных данных, тогда вам следует рассмотреть фактический синтаксический анализатор HTML, а не использовать регулярное выражение.

+0

Включая '' \ s'', как это ''/\ s * <[^>] +> \ s */g'' будет устранять все пробелы в результате. –

+0

@PedroPinheiro Пуд точка. Я не заметил, что желаемый вывод в OP имел пробелы. Я соответствующим образом обновлю ответ. Тем не менее, в Python обязательные косынки не нужны. Кроме того, 're.sub' использует параметр * global * по умолчанию, поэтому' g' также не требуется. –

Смежные вопросы