15

Python で文字列からタグを削除する必要があります。

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

「タイトル」のみを残して、両端のタグ全体を削除する最も効率的な方法は何ですか? HTMLタグでこれを行う方法しか見たことがありませんが、Pythonではうまくいきませんでした。私はこれを特にGISプログラムであるArcMapに使用しています。レイアウト要素には独自のタグがあり、2 つの特定のタイトル テキスト要素のタグを削除するだけです。これには正規表現がうまく機能するはずですが、他の提案も受け付けています。

4

6 に答える 6

64

これはうまくいくはずです:

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

正規表現はこの仕事に適したツールではないと言っている皆さんへ:

問題の文脈は、通常の/文脈のない言語に関するすべての反論が無効であるようなものです。a = <彼の言語は基本的に 、b = >、の 3 つのエンティティで構成されていc = [^><]+ます。彼は の出現をすべて削除したいと考えていacbます。これは、彼の問題を文脈自由文法に関係するものとしてかなり直接的に特徴付けており、それを通常の問題として特徴付けることはそれほど難しくありません。

誰もが「HTMLを正規表現で解析できない」という答えを好むことは知っていますが、OPはそれを解析したくなく、単純な変換を実行したいだけです。

于 2010-09-07T20:07:57.100 に答える
5

正規表現の使用は避けてください。正規表現は単純な文字列で機能しますが、複雑な文字列を取得すると、将来的に問題が発生します。

BeautifulSoupget_text()機能を使用できます。

from bs4 import BeautifulSoup

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

print(soup.get_text())
于 2015-12-30T18:18:47.197 に答える
3

この正規表現を検索して空の文字列に置き換えるとうまくいくはずです。

/<[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
于 2010-09-07T20:10:44.993 に答える
1

ソース テキストが整形式の 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 をお勧めします。複数の投稿者が指摘しているように、正規表現を使用してタグを解析することはお勧めできません。

于 2010-09-07T20:59:18.467 に答える
1

値を解析して取得するためだけの場合は、BeautifulStoneSoup をご覧ください。

于 2010-09-07T20:04:06.757 に答える
-3

ElementTree などの XML パーサーを使用します。正規表現は、この仕事に適したツールではありません。

于 2010-09-07T21:00:38.603 に答える