【发布时间】:2021-04-28 17:53:37
【问题描述】:
我正在尝试删除所有形式为 \x 后跟两个数字的元素。我创建了以下正则表达式r'\\x[0-9][0-9]'。然后我使用以下代码对其进行测试:
pattern1 = r'\\x[0-9][0-9]'
a = "\x85ciao \x85839"
re.sub(pattern1, "", a)
但它不起作用,因为它不能替代任何东西。输出实际上与字符串 a 相同。什么可能导致这种行为?
在字符串中替换 \' 时我也遇到了同样的问题。我只想删除反冲并保留'。我该怎么做?
【问题讨论】:
-
两个问题:(1)你没有对
re.sub()的结果做任何事情——它不会改变原始字符串,它会返回一个新字符串; (2) 在a中实际上没有任何反斜杠或'x',两个\x85是转义序列,当Python 编译字符串文字时,它们被转换为单个非ASCII 字符。 -
这是一个重要且经常被误解的观点,所以我想重申一下。您的字符串不包含任何反斜杠。该符号只是为了方便您编写字符串。您的字符串包含 10 个字符,而不是 16 个。其中两个字符恰好是 ASCII 值 0x85,这是 CP1252 中的省略号。如果您想摆脱这些,请使用
a.replace('\x85','')。这是 Python2 还是 Python 3?字符串是从哪里来的? -
这是 Python3。我知道我可以用
a.replace('\x85','')删除它们,但问题是同一个问题有很多不同的两位数组合(例如\x92、\x97、...),我正在尝试找到一种同时删除所有它们的方法,因此使用正则表达式。有什么你知道的方法吗?这些字符串是从文件的相应 HTML 版本中检索到的 S-1 公司文件。