Python正则表达式一个二进制文件文本文件如何使用一个数字范围和单词边界?

2024-09-27 02:20:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文本文件,它要求我以二进制形式读取并以二进制形式写出。没问题。我需要用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)

它不再匹配任何东西了,知道为什么吗?在


Tags: reline二进制stuffx006x000x004x005
1条回答
网友
1楼 · 发布于 2024-09-27 02:20:05

你可以试试:

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'。在

相关问题 更多 >

    热门问题