2016-07-14 16 views
-2

私はこのようなテキストファイルを持っています。文字列の前の文字を削除する正規表現

( '12'、 '9'、 '56'、 'Trojan.Genome.Win32.230770' '04df65889035a471f8346565600841af' '9190953854e36a248819e995078a060e0da2e687' :それ以上50万行を有します'zillya'、 '16'、 'TROJAN'、 'trojan.png'、 '2016-01-14 21:35:44 ')'、 ; #LINE1

( '13'、 '3'、 '54'、 'UnclassifiedMalware' '069506a02c4562260c971c8244bef301' 'd08e90874401d6f77768dd3983d398d427e46716' '78e155e6a92d08cb1b180edfd4cc4aceeaa0f388cac5b0f44ab0af97518391a2' 「2015年10月15日00:00 :00 '、' Comodo '、' 6 '、' MALWARE '、' malware.png '、 ' 2016-01-14 21:35:44 '); #LINE2私はこのような何かにテキストファイルを保存しておきたい

Trojan.Genome.Win32.230770、04df65889035a471f8346565600841af、 9190953854e36a248819e995078a060e0da2e687、 b6488037431c283da6b9878969fecced695ca746afb738be49103bd57f37d4e4 #のLINE1

機密扱いのないソフトウェア、069506a02c4562260c971c8244bef301、 d08e90874401d6f77768dd3983d398d427e46716、 78e155e6a92d08cb1b180edfd4cc4aceeaa0f388cac5b0f44ab0af97518391a2 #1 LINE2

は、私は私が考えることができますが、彼らは動作しませんでした正規表現のすべてを試してみました。

+3

コンマ区切りの構造のようですが、それを分割して不要なセルを削除しないのはなぜですか? – User1234

+0

どのエンジン/開発環境ですか? –

+0

@ User1234これは、ファイルの最初の2行だけです。ファイルには実際には50万本以上の行があります! – Viettungvuong

答えて

0

これが複数回実行されることになっている場合は、単にドキュメントが不足しているため、この解決策が不足している可能性があります。

ファイルにregexを適用するだけでは(おそらくそれを保存することさえできないかもしれませんが)、他の人には本当に再現可能ではありません。

私はあなたが実際に何をしているかを明確にするために、小さなスクリプトpythonを提案しています。あなたは出力の正確なフォーマットを完全に制御できるだけでなく、出力先などに書き込むこともできます。

# get regex module 
import re 

filename = 'path/to/your/file.txt' 

# open file 
with open(filename) as file_handle: 
    for line in file_handle: 
     # remove trailing whitespace 
     line = line.strip() 

     # if line is empty forget about it 
     if not line: 
      continue 

     # split into comment part and data part 
     data, comment = line.split(';') 

     # transform into comma seperated values 
     # aka. remove whitespace, parentheses, quotes 
     data = re.sub(r'\s|\(|\)|\'', '', line) 

     # file is build up like this (TODO: make names more logical) 
     nr1, nr2, nr3,               \ 
     name,                 \ 
     hash1, hash2, hash3,             \ 
     first_date, discoverer, nr4,           \ 
     category, snapshot_file, last_date = data.split(',') 

     # print, or possibly write 
     print("{name:}, {hash1:}, {hash2:}, {hash3:} {comment:}".format(**locals())) 
+0

今すぐC++で書くことについてのあなたのコメントを読んで、同様のことはもちろんその言語でも行えます。 –

0

これはコンマで区切られたファイルなので、正規表現を使用して検索と置換を行うことはできますが、プログラミング言語の文字列を分割するだけでは効率的ではありません。

'([^']*)',\s* 

は、カンマと任意の末尾の空白が続く次の単一引用符を、遭遇するまで、すべてのテキストをキャプチャし、単一引用符があります。

カンマで区切られたフィールドごとに1回、これを繰り返します。

少し表示され、like thisと表示され、テキストに置き換えるフィールドを選択できます。この場合、フィールドは\4から\8までしか必要としません。

\1\3がキャプチャされない可能性がありますか?確かに、非キャプチャ(?:...)グループを使用します。あなたの置換は\1から\5までの範囲になります。しかし、これにより、他のフィールドを含めるか除外したい場合は、代入フィールドにそのフィールドを含めたり除外したりするだけの柔軟性があります。

+0

しかし、私はどのようにメモ帳++でそれを行うことができますか? – Viettungvuong

+0

[パターン内の余分な空白](https://regex101.com/r/uG5tN7/2)を取り除くだけです。これがNotepad ++(またはその他のエンジン/エディタ/言語)にあることがわかっていれば、私たちの反応を特定の方法で調整するかどうかを知ることができます。 – OnlineCop

関連する問題