簡體   English   中英

如何使用正則表達式從python中刪除字符串中的標簽? (不是HTML)

[英]How to remove tags from a string in python using regular expressions? (NOT in HTML)

我需要從python中的字符串中刪除標簽。

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

刪除兩端的整個標記的最有效方法是什么,只留下“標題”? 我只看到過使用HTML標簽做到這一點的方法,而這在python中對我沒用。 我正在使用這個特別適用於GIS程序ArcMap。 它有自己的布局元素標簽,我只需刪除兩個特定標題文本元素的標簽。 我相信正則表達式應該可以正常使用,但我對任何其他建議持開放態度。

這應該工作:

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

對於每個人說正則表達式不是正確的工具:

問題的背景是關於常規/無上下文語言的所有異議都是無效的。 他的語言基本上由三個實體組成: a = <b = >c = [^><]+ 他想刪除任何acb 這直接將他的問題描述為涉及無上下文語法的問題,並且將其定性為常規語法並不困難。

我知道每個人都喜歡“你不能用正則表達式解析HTML”的答案,但是OP不想解析它,他只是想進行簡單的轉換。

請避免使用正則表達式。 雖然正則表達式可以處理你的簡單字符串,但如果你得到一個復雜的字符串,你將來會遇到問題。

您可以使用BeautifulSoup get_text()功能。

from bs4 import BeautifulSoup

text = '<FNT name="Century Schoolbook" size="22">Title</FNT>'
soup = BeautifulSoup(text)

print(soup.get_text())

搜索此正則表達式並將其替換為空字符串應該可行。

/<[A-Za-z\/][^>]*>/

示例(來自python shell):

>>> import re
>>> my_string = '<FNT name="Century Schoolbook" size="22">Title</FNT>'
>>> print re.sub('<[A-Za-z\/][^>]*>', '', my_string)
Title

如果它僅用於解析和檢索值,您可以查看BeautifulStoneSoup。

如果源文本是格式良好的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。 正則表達式不適合這項工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM