Подтвердить что ты не робот

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

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

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

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

4b9b3361

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