2016-11-10 28 views
1

Pythonで正規表現を使用して特殊文字列を含む文字を削除するにはどうすればよいですか?

例私は、ログをクリーンアップしようとしていると私はいくつかの特別な文字列を削除する:

%/h > %/h Current value over threshold value 
Pg/S > Pg/S Current value over threshold value 
Pg/S > Pg/S No. of pages paged in exceeds threshold 
MB < MB min. avg. value over threshold value 

を私はいくつかのパターンを使用しようとしましたが、動作しないようです。

re.sub(r'\w\w\/\s>\s\w','',text) 

私は特別なパターンを削除するための良いアイデアはありますか?

私は唯一の私の出力は便利な言葉が含まれている期待.../...> .../...

を削除したいです。

Current value over threshold value 
    No. of pages paged in exceeds threshold 
    min. avg. value over threshold value 

ありがとうございました!

+0

は '>'常に同じ前と後のコンテンツですか?一致する '^([^ \ s>] *)\ s +> \ s + \ 1'は私の考えです。 –

+0

それはいつもそのように間隔を置くつもりですか?言い換えれば、興味のある文字列は常に第3のスペースの後になるだろうか? – idjaw

答えて

3

は、ファイルの構造を仮定は次のとおりです。

[特殊文字列] [<または>] [特殊文字列] [メッセージ]

、これは動作するはずです:

>>> rgx = re.compile(r'^[^<>]+[<>] +\S+ +', re.M) 
>>> 
>>> s = """ 
... %/h > %/h Current value over threshold value 
... Pg/S > Pg/S Current value over threshold value 
... Pg/S > Pg/S No. of pages paged in exceeds threshold 
... MB < MB min. avg. value over threshold value 
... """ 
>>> 
>>> print(rgx.sub('', s)) 
Current value over threshold value 
Current value over threshold value 
No. of pages paged in exceeds threshold 
min. avg. value over threshold value 
+0

ありがとうございます! –

+0

なぜ私は初めに^を使うのですか?パターンが始まる最初の位置を指していますか? –

+0

@zihanmeng。はい - 「行の先頭に一致する」ことを意味します。これは、 're.M'フラグが必要な理由です(つまり、複数行のマッチング)。 – ekhumoro

3

照合しようとしているパターンに基づいて、文字列の配置場所を常に知っているようです。あなたは実際に正規表現なしでこれを行うことができ、ちょうどsplitスライスのセクションを取得するために使用します。最後にjoinを使用して文字列に戻り、最終結果を返します。

以下の結果は、次の操作を行います:

s.split() - 各単語がリスト

[3:]のエントリになりますリストを作成する空間上の分割を - 4番目の位置からすべてを取ることによって、リストをスライス(0インデックス)

' '.join() - リスト

デモから各要素の間にスペースを置く、バック文字列に変換します:

s = "%/h > %/h Current value over threshold value" 
res = ' '.join(s.split()[3:]) 

出力:

Current value over threshold value 
関連する問題