我有一个文本文件,它要求我以二进制形式读取并以二进制形式写出。没问题。我需要用Xs屏蔽社会保险号码,通常很容易:
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)
注意事项:
我的regex不是应该是一个数字范围吗?我只是不知道如何在二进制中做到这一点。我的单词边界只会作为\B而不是\B,呃。。怎么回事?在
更新:我也尝试过:
line = re.sub(b"[\x30-\x39]", b"\x58", line)
即使我喜欢做一些简单的事情,但如果我喜欢的话:
line = re.sub(b"[\x30-\x39][\x30-\x39]", b"\x58\x58", line)
它不再匹配任何东西了,知道为什么吗?在
你可以试试:
这将保持每个垃圾字符的原样,并将它们写入
test2.txt
。请注意,当您不希望每个反斜杠都转义时,可以在
Python
中使用r'string here'
。在相关问题 更多 >
编程相关推荐