1

.txt 形式 (SEC ファイリング) のすべてのタグを見つけて、ファイリングから削除する必要があります。

さて、Pythonの初心者として、次のコードを使用してタグを見つけましたが、None、None、...が返され、すべてのタグを削除する方法がわかりません。私の質問は、ドキュメントにタグ以外のすべてが含まれるように、すべてのタグ <....> を見つけてすべてのタグを削除する方法です。

import re
tags = [re.search(r'<.+>', line) for line in mylist]
#mylist is the filename opened by open(filename, 'rU').readlines()

御時間ありがとうございます。

4

3 に答える 3

0

まず、別の正規表現が必要になります。あなたが持っているものは、最初の「<」と最後の「>」の間のすべてを選択しますしたがって、文字列:

I can type in <b>BOLD</b>

マッチをレンダリングします:

大胆な

これを修正する方法は、怠惰な演算子を使用することです。このサイトには、なぜ使用する必要があるかについての良い説明があります

<.+?>

HTML タグに一致します。そして最終的には、次のように置き換える必要があります。

re.sub(r'', '', 行)

ただし、実際に一致させたいのはタグの間だと思います。ここで、先見の明が驚くべき結果をもたらすことができます。

(?<=>).+?(?=<)

クレイジーに見えますが、かなり簡単に壊れます。あなたが知っていることから始めましょう:

.+?

任意の長さの文字列に一致します。? 可能な限り短い文字列に一致することを意味します。(前に追加した怠惰)

(<?=...)

後読みです。表情を捉えずに、文字通り自分の後ろを向いています。

(?=...)

先読みです。後読みと同じです。次に、少し findall を使用します。

re.findall(r'(?<=>).+?(?=<)', line);

これで、配列を繰り返し処理し、取り残された不要なスペースを削除して、非常に優れた出力を作成できます。または、本当に置換メソッドを使用したい場合 (私は知っています):

re.sub(r'\s*(?:</+?>\s*)+', ' ', line)

\s*

は、タグに添付された任意の量の空白と一致します。これを 1 つのスペースに置き換えることができます。これにより、慎重にタグを付けすぎるとしばしば発生する不安なダブル スペースやトリプル スペースが削減されます。おまけとして、

(?: ... ) 

は、非キャプチャ グループとして知られています (結果に小さいサブ マッチは表示されません)。この状況では、実際には必要ありませんが、グループは常に考えるのに役立つものであり、必要なものだけをキャプチャすることをお勧めします。その末尾に + を追加すると (私が行ったように)、隣接するタグと同じ数のタグがキャプチャされ、それらが 1 つのスペースに取り除かれます。したがって、ファイルに

This is <b> <i> overemphasized </b> </i>!

あなたが得るだろう

This is overemphasized !

それ以外の

This is   overemphasized  !
于 2012-08-28T03:03:45.610 に答える
0
re.sub(r'<.*?>', '', line)

使用re.sub<.*?>表現

于 2012-08-28T02:58:32.033 に答える
0

次のようなものを使用します。

re.sub(r'<[^>]+>', '', open(filename, 'r').read())

現在のコードはNone、角かっこで囲まれたタグを含まない行ごとに取得しています。

おそらく[^>]、最初の > までのみ一致することを確認するために使用する必要があります。

于 2012-08-28T02:58:34.683 に答える