Как удалить теги из строки в python с помощью регулярных выражений? (Не в HTML)
Мне нужно удалить теги из строки в python.
<FNT name="Century Schoolbook" size="22">Title</FNT>
Как наиболее эффективно удалить весь тег с обоих концов, оставив только "заголовок"? Я видел только способы сделать это с помощью HTML-тегов, и это не сработало для меня в python. Я использую это, в частности, для ArcMap, ГИС-программы. У него есть собственные теги для его элементов макета, и мне просто нужно удалить теги для двух конкретных элементов текста заголовка. Я считаю, что регулярные выражения должны хорошо работать для этого, но я открыт на любые другие предложения.
6 ответов:
Это должно сработать:
import re re.sub('<[^>]*>', '', mystring)Всем, кто говорит, что регулярные выражения не являются правильным инструментом для работы:
Контекст проблемы таков, что все возражения относительно регулярных/контекстно-свободных языков являются недействительными. Его язык по существу состоит из трех сущностей:a = <,b = >, иc = [^><]+. Он хочет удалить любые вхожденияacb. Это довольно прямо характеризует его проблему как проблему, включающую контекстно-свободную грамматику, и это не намного сложнее. охарактеризуйте его как обычный. Я знаю, что всем нравится ответ "вы не можете анализировать HTML с помощью регулярных выражений", но ОП не хочет анализировать его, он просто хочет выполнить простое преобразование.
Поиск этого регулярного выражения и замена его пустой строкой должны работать.
/<[A-Za-z\/][^>]*>/Пример (из оболочки python):
>>> import re >>> my_string = '<FNT name="Century Schoolbook" size="22">Title</FNT>' >>> print re.sub('<[A-Za-z\/][^>]*>', '', my_string) Title
Пожалуйста, избегайте использования регулярных выражений. Несмотря на то, что регулярное выражение будет работать на ваш простой строкой, но вы получите проблемы в будущем, если вы получите сложным.
Вы можете использовать функцию BeautifulSoup
get_text().from bs4 import BeautifulSoup text = '<FNT name="Century Schoolbook" size="22">Title</FNT>' soup = BeautifulSoup(text) print(soup.get_text())
Если исходный текст является хорошо сформированным XML, можно использовать модуль stdlib ElementTree:
import xml.etree.ElementTree as ET mystring = """<FNT name="Century Schoolbook" size="22">Title</FNT>""" element = ET.XML(mystring) print element.text # 'Title'Если источник не очень хорошо сформирован, BeautifulSoup-хорошее предложение. Использование регулярных выражений для разбора тегов не является хорошей идеей, как указывали некоторые плакаты.
Используйте синтаксический анализатор XML, например ElementTree. Регулярные выражения не являются подходящим инструментом для этой работы.
Comments