我有一个文本文件,要求我用二进制文件读取它,然后用二进制文件写出它。没问题。我需要用X掩盖社会保险号码,通常很容易:
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)
备注:
我的准则不应该是一个范围的数字吗?我只是不知道怎么用二进制语言来做。我的字界只能倒转为\b而不是b,呃.怎么回事?
更新:我也尝试过这样做:
line = re.sub(b"[\x30-\x39]", b"\x58", line)
每个数字都是这样,但如果我试着做一些简单的事情,比如:
line = re.sub(b"[\x30-\x39][\x30-\x39]", b"\x58\x58", line)
它和任何东西都不匹配,知道为什么吗?
发布于 2017-10-04 16:33:27
你可以试试:
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
。
注意,当您不希望每一个反斜杠都转义时,可以在r'string here'
中使用Python
。
https://stackoverflow.com/questions/46569152
复制相似问题