Как удалить теги из строки в python с помощью регулярных выражений? (Не в HTML)

Мне нужно удалить теги из строки в Python.

<FNT name="Century Schoolbook" size="22">Title</FNT>

каков наиболее эффективный способ удалить весь тег с обоих концов, оставив только "заголовок"? Я видел только способы сделать это с HTML-тегами, и это не сработало для меня в python. Я использую это особенно для ArcMap, ГИС-программы. У него есть собственные теги для его элементов макета, и мне просто нужно удалить теги для двух определенных текстовых элементов заголовка. Я считаю, что регулярные выражения должны отлично работать для этого, но я готов выслушать любые другие предложения.

6 ответов


Это должно работать:

import re
re.sub('<[^>]*>', '', mystring)

всем, кто говорит, что regexes не являются правильным инструментом для работы:

контекст проблемы таков, что все возражения относительно обычных/контекстно-свободных языков недействительны. Его язык по существу состоит из трех сущностей:--1-->, b = > и c = [^><]+. Он хочет удалить все вхождения acb. Это довольно прямо характеризует его проблему как проблему, связанную с контекстно-свободной грамматикой, и не намного сложнее охарактеризовать его как обычный.

Я знаю, что всем нравится ответ" вы не можете анализировать HTML с регулярными выражениями", но OP не хочет его анализировать, он просто хочет выполнить простое преобразование.


поиск этого регулярного выражения и замена его пустой строкой должны работать.

/<[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

Если это только для разбора и извлечения значения, вы можете взглянуть на BeautifulStoneSoup.


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

Вы можете использовать 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. Регулярные выражения не подходят для этой работы.