我有一個文本文件,需要我在二進制文件中讀取它,並用二進制寫出。沒問題。我需要屏蔽掉有兩個X身分證號碼,很容易正常:Python正則表達式二進制文件文本文件 - 如何使用一系列數字和單詞邊界?
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)
注:
- 的垃圾對於兒童,我要堅持這樣說,這
- 需要字邊界,因此4號線不會被屏蔽掉
不該我正則表達式是數字,而不是一個範圍?我只是不知道如何在二進制中做到這一點。而我的詞語界限只能用作爲\ B而不是\ b,呃..這是怎麼回事?
更新:我也試過這樣:
line = re.sub(b"[\x30-\x39]", b"\x58", line)
,並且它會爲每一個數字,但是如果我嘗試連做喜歡的事,很簡單:
line = re.sub(b"[\x30-\x39][\x30-\x39]", b"\x58\x58", line)
它不匹配任何東西,爲什麼?
有一堆'破'字型字符,所以我需要把它作爲二進制文件來處理。有些是UTF-8,但人們纏繞繞線,以及不符合業務要求(殺我)的東西,我需要保留破壞的角色並簡單地去掉SSN。如果我採用UTF-8編碼,我開始得到各種編碼錯誤。 – sniperd
具體與我得到的垃圾文件:UnicodeDecodeError:'utf-8'編解碼器無法解碼位置0中的字節0xff:無效起始字節 – sniperd
@sniperd:更新,這是否適合您?我在'test2.txt'這裏得到相同的垃圾字符。 – Jan