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