2017-10-04 7 views
1

私はバイナリでそれを読んでバイナリで書き出す必要があるテキストファイルを持っています。問題ない。私は通常、非常に簡単、のXと社会保障番号をマスクする必要があります。Python regexバイナリファイルのテキストファイル - 数字と単語の境界をどのように使うか?

text = re.sub("\\b\d{3}-\d{2}-\{4}\\b","XXX-XX-XXXX", text)

これは私が解析していたテキストのサンプルです:

more stuff here CHILDREN�S 001-02-0003 get rid of that stuff goes here not001-02-0003 but ssn:001-02-0003

と私は有効にする必要がありますこの中にそれ:

more stuff here CHILDREN�S XXX-XX-XXXX get rid of that stuff goes here not001-02-0003 but ssn:XXX-XX-XXXX

スーパー!だから今私はバイナリで同じ正規表現を書くことを試みている。ここで私が持っているものであり、それはだ「作品」が、それは右のすべてで感じていないおやっ:

line = re.sub(b"\\B(\x000|\x001|\x002|\x003|\x004|\x005|\x006|\x007|\x008|\x009)(\x000|\x001|\x002|\x003|\x004|\x005|\x006|\x007|\x008|\x009)(\x000|\x001|\x002|\x003|\x004|\x005|\x006|\x007|\x008|\x009)\x00-(\x000|\x001|\x002|\x003|\x004|\x005|\x006|\x007|\x008|\x009)(\x000|\x001|\x002|\x003|\x004|\x005|\x006|\x007|\x008|\x009)\x00-(\x000|\x001|\x002|\x003|\x004|\x005|\x006|\x007|\x008|\x009)(\x000|\x001|\x002|\x003|\x004|\x005|\x006|\x007|\x008|\x009)(\x000|\x001|\x002|\x003|\x004|\x005|\x006|\x007|\x008|\x009)(\x000|\x001|\x002|\x003|\x004|\x005|\x006|\x007|\x008|\x009)\\B", b"\x00X\x00X\x00X\x00-\x00X\x00X\x00-\x00X\x00X\x00X\x00X", line)

注:

  • CHILDRENSでジャンク、お奨めは、そのようにそれを維持することを
  • は、このように第四行は私の正規表現ではなく、数字の範囲すべきではない

をマスクされません、ワード境界に必要ですか?私はちょうどバイナリでそれを行う方法を知らない。そして私の言葉の境界は、\ bの代わりにの後方にとして\ Bとしか働かないのです。

UPDATE:私も、この試みた:

line = re.sub(b"[\x30-\x39]", b"\x58", line)

をし、それはすべての数のためにそれを行いますが、私ものような単純な何かをしようとした場合:

line = re.sub(b"[\x30-\x39][\x30-\x39]", b"\x58\x58", line)

もう何も一致しません。理由は何ですか?

答えて

0

あなたは試してみてください:これは、彼らがそうであるように、すべてのジャンク文字を保持し、test2.txtに書き込む

import re 

rx = re.compile(r'\b\d{3}-\d{2}-\d{4}\b') 

with open("test.txt", "rb") as fr, open("test2.txt", "wb+") as fp: 
    repl = rx.sub('XXX-XX-XXXX', fr.read()) 
    fp.write(repl) 


すべてのバックスラッシュをエスケープしないようにする場合は、Pythonr'string here'を使用できます。

+0

「壊れた」タイプの文字がたくさんあるので、バイナリとして処理する必要があります。いくつかはUTF-8ですが、人々は巻いたものを持っていますが、ビジネス上の要件(私を殺す)のために、私は壊れた文字を保ち、単にSSNを取り除く必要があります。私がUTF-8エンコーディングに行くと、あらゆる種類のエンコーディングエラーが発生します。 – sniperd

+0

ゴミ箱のファイルが特にあります:UnicodeDecodeError: 'utf-8'コーデックは位置0のバイト0xffをデコードできません:無効な開始バイト – sniperd

+0

@sniperd:更新されました。私はここで 'test2.txt'に同じ捨て文字を返します。 – Jan

関連する問題