0

HTMLアンカータグを含む生のドキュメントを解析するために解析したかったのですが、残念ながら次のような無効なタグが含まれています:

<a href="A 4"drive bay">some text here</a>

値が実際のリンクではないことはわかっていhrefますが、そのままにしておきましょう。ここで必要なのは、href 値'A 4"drive bay' とリンク テキストを取得することです'some text here'

私は python を使用しており、python ライブラリ「BeautifulSoup」を試してみましたが、すべてのアンカー タグを取得するのに非常にうまく機能します。ただし、問題は、href 値に ' " ' が含まれている前述の無効なアンカー タグに遭遇したときにエラーにフラグを立てることです。このようなケースは、解析している元のデータに存在し、そのようなデータを変更することはオプションではありません..

BeautifulSoup を使用した私の python コードのセクションは次のとおりです。

sub_s = BeautifulSoup(line)
for l in sub_s.find_all('a'):
   l.replace_with(l.string)
print str(sub_s),

コードはアンカータグをプレーンテキストに置き換えるだけです

誰かが私に問題を解決してくれたら、本当に感謝しています...正規表現もそうです.. ^^

4

2 に答える 2

0

この特定の問題を修正するために、正規表現を使用して入力テキストを事前にフィルター処理できると思います。何かのようなもの:

>>> r = re.compile('''<a[^>]+href="([^>]+)">''')
>>> m = r.match(text)
>>> m.group(1)
'A 4"drive bay'
>>> r.sub('<a href="%s">' % m.group(1).replace('"', ' '), text)
'<a href="A 4 drive bay">some text here</a>'

これは完全な解決策ではありません。前進する方法の単なるアイデア。

于 2012-05-07T19:16:37.147 に答える
0

Selfhtm 8.1.2 (ドイツで非常に頻繁に使用される HTML のドキュメント) では、次のことを推奨しています。

  1. 最初の位置のラテン文字 (az、AZ)
  2. 後のラテン文字、数字 (0 ~ 9)、-、_、または .

最初の要件を満たすために、次の正規表現を使用します。

name="[^a-zA-Z]

(nb 最初の先頭のスペースはそれほど重要ではないようです。ヘリオスのテキストパッド エディタなど、ほとんどの正規表現の実装で動作します)

作業を容易にするために、他の要件の正規表現もあります。1 つの文字アンカーもキャッチします (それらは有効です) が、考えられる問題を特定するのに役立ちます。

name=".?[^a-zA-Z0-9_\.-][^"]*"

構文チェッカーで見つけた他の問題のほとんど。

于 2016-04-21T09:37:20.167 に答える