Python正则表达式二进制文件文本文件 - 如何使用一系列数字和单词边界?
我有一个文本文件,需要我在二进制文件中读取它,并用二进制写出。没问题。我需要屏蔽掉有两个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)
它不匹配任何东西,为什么?
您可以试试:
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)
这每一个垃圾字符保留,因为它们并将它们写入test2.txt
。
请注意,如果您不希望每个反斜杠都被转义,则可以在Python
中使用r'string here'
。
有一堆'破'字型字符,所以我需要把它作为二进制文件来处理。有些是UTF-8,但人们缠绕绕线,以及不符合业务要求(杀我)的东西,我需要保留破坏的角色并简单地去掉SSN。如果我采用UTF-8编码,我开始得到各种编码错误。 – sniperd
具体与我得到的垃圾文件:UnicodeDecodeError:'utf-8'编解码器无法解码位置0中的字节0xff:无效起始字节 – sniperd
@sniperd:更新,这是否适合您?我在'test2.txt'这里得到相同的垃圾字符。 – Jan