【问题标题】:Cannot substitute with regular expression re library不能用正则表达式 re 库替换
【发布时间】: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 公司文件。

标签: python python-re


【解决方案1】:

你可以这样做:

import re
a = "\x85ciao \x85839"
re.sub('\x85','', a)

或者简单地说:

a.replace("\x85", "")

【讨论】:

  • 这里不需要正则表达式。简单的字符串替换就可以了。
猜你喜欢
  • 1970-01-01
  • 2020-10-27
  • 1970-01-01
  • 1970-01-01
  • 2019-01-24
  • 2016-07-17
  • 2020-11-05
  • 2014-03-29
  • 1970-01-01
相关资源
最近更新 更多