Pyparsing может обрабатывать теги XML или HTML, когда вы не хотите обязательно создавать полную модель документа, а просто извлекаете или манипулируете текстом здесь и там.
Pyparsing включает makeHTMLTags
метод определения выражений сопоставления тегов и anyOpenTag
и anyCloseTag
выражений, которые будут соответствовать любым тегам XML или HTML.
Простой стриптизер тегов может быть записан с помощью:
>>> import pyparsing as pp
>>> anyHtml = pp.anyOpenTag | pp.anyCloseTag
>>> anyHtml.suppress().transformString(data)
Метод suppress()
берет соответствующий текст и подавляет его из проанализированного вывода, а transformString
обрабатывает полный ввод, применяя каждое выражение синтаксического анализа.
Передача его в строке образца дает то же самое вывод как BS text()
метод:
>>> anyHtml.suppress().transformString(data)
'(i)you'
Но вы можете изменить этот стриппер так, чтобы он пропускал любые теги, которые вы хотите сохранить, сначала проверяя их и отрицая их с помощью '~' (оператор быстрого вызова для pp.NotAny
). Определите выражение синтаксического анализа, которое описывает все теги, которые вы не хотите удалить.
>>> keepers = pp.MatchFirst(pp.makeHTMLTags(keeper)[0] for keeper in "EXPE SAVE OTHER".split())
Затем используйте эту отрицательную проверку, чтобы избежать совпадения с вашими тегами для сохранения:
>>> (~keepers + anyHtml).suppress().transformString(data)
'<EXPE>(i)you'