Как удалить теги из строки в python с помощью регулярных выражений? (НЕ в HTML)
Мне нужно удалить теги из строки в python.
<FNT name="Century Schoolbook" size="22">Title</FNT>
Каков наиболее эффективный способ удалить весь тег на обоих концах, оставив только "Заголовок"? Я только видел способы сделать это с помощью HTML-тегов, и это не сработало для меня в python. Я использую это специально для ArcMap, программы ГИС. Он имеет собственные теги для своих элементов компоновки, и мне просто нужно удалить теги для двух конкретных текстовых элементов заголовка. Я считаю, что регулярные выражения должны хорошо работать для этого, но я открыт для любых других предложений.
Ответы
Ответ 1
Это должно работать:
import re
re.sub('<[^>]*>', '', mystring)
Каждому, кто говорит, что регулярные выражения не являются правильным инструментом для задания:
Контекст проблемы таков, что все возражения относительно обычных/контекстно-свободных языков недопустимы. Его язык по существу состоит из трех сущностей: a = <
, b = >
и c = [^><]+
. Он хочет удалить любые вхождения acb
. Это справедливо непосредственно характеризует его проблему как одну, включающую контекстно-свободную грамматику, и ее не так сложно охарактеризовать как регулярную.
Я знаю, что каждому нравится, что "вы не можете анализировать HTML с регулярными выражениями", но OP не хочет его анализировать, он просто хочет выполнить простое преобразование.
Ответ 2
Поиск этого регулярного выражения и его замена пустой строкой должны работать.
/<[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
Ответ 3
Если это только для синтаксического анализа и получения значения, вы можете взглянуть на BeautifulStoneSoup.
Ответ 4
Если исходный текст является правильно сформированным 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 - хорошее предложение. Использование регулярных выражений для синтаксического анализа не является хорошей идеей, как отмечали несколько плакатов.
Ответ 5
Пожалуйста, избегайте использования регулярных выражений. Несмотря на то, что регулярное выражение будет работать с вашей простой строкой, но вы получите проблему в будущем, если вы получите сложный.
Вы можете использовать функцию BeautifulSoup get_text()
.
from bs4 import BeautifulSoup
text = '<FNT name="Century Schoolbook" size="22">Title</FNT>'
soup = BeautifulSoup(text)
print(soup.get_text())
Ответ 6
Используйте синтаксический анализатор XML, например ElementTree. Регулярные выражения не являются подходящим инструментом для этой работы.