python - 正则表达式无法匹配 python 中的特殊符号

标签 python regex

我有一个字符串:s = "we are\xaf\x06OK\x03family, good",我想用 \xaf,\x06\x03 加上 '',正则表达式是 pat = re.compile(r'\\[xX][0-9a-fA-F]+') ,但它无法匹配任何内容。代码如下:

pat = re.compile(r'\\[xX][0-9a-fA-F]+')
s = "we are \xaf\x06OK\x03family, good"
print(s)
print(re.sub(pat, '', s))

结果是

我们是 ¯OKfamily,很好 我们是 ¯OKfamily, good,

但是我怎样才能我们是一家人,很好

最佳答案

您犯了一个基本但常见的错误,即混淆了 Python 源代码中字符串的表示及其实际值。

Python 中有许多转义码,它们不会在源代码的常规字符串中逐字表示。例如,"\n" 表示单个换行符,即使 Python 表示法占用两个字符。反斜杠用于引入此表示法。有许多专用的转义码,如 \r\a 等,还有一个通用符号 \x01,它允许您编写任何十六进制字符代码(\n 等同于\x0a\r 等同于\x0d, ETC)。要表示文字反斜杠字符,您需要使用另一个反斜杠对其进行转义:"\\"

在“原始字符串”中,不支持反斜杠转义;所以 r"\n" 代表一个包含两个字符的字符串,一个反斜杠 \ 和一个小写字母 n。您可以等效地使用非原始字符串表示法编写 "\\n"r 前缀不是字符串的一部分,它只是告诉 Python 如何解释后面引号之间的字符串(即根本不解释;每个字符逐字表示自己)。

您的问题并不清楚您实际需要哪些解释,因此我将针对这两种解释提出解决方案。

这是一个包含实际反斜杠的文字字符串:

pat = re.compile(r'\\[xX][0-9a-fA-F]+')
s = r"we are \xaf\x06OK\x03family, good"
print(s)
print(re.sub(pat, '', s))

这是一个包含控制字符和非 ASCII 字符的字符串,以及用于删除它们的正则表达式替换:

pat = re.compile(r'[\x00-\x1f\x80-\xff]+')
s = "we are \xaf\x06OK\x03family, good"
print(s)
print(re.sub(pat, '', s))

另一个复杂的问题是正则表达式引擎有自己内部的反斜杠用途;我们通常更喜欢对正则表达式使用原始字符串,以免 Python 和正则表达式引擎都解释反斜杠(有时以不兼容的方式)。

关于python - 正则表达式无法匹配 python 中的特殊符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54003109/

相关文章:

python - Django 1.10 - 每 X 秒使用数据库中的数据更新网页

Python seaborn : Unable to make my chart look like excel chart

python - AWS Athena PyAthena AccessDeniedException

javascript - JS正则表达式仅替换重复 block 的第一个 block 中的内容

python - Python 中的正则表达式不匹配字符串(但在检查 rubular 时匹配)

考虑捕获组的 Java 模式拆分

java - Pattern.DOTALL 与 String.replaceAll

python - 如何在Google Colab中获得分配的GPU规范

python - 如何对 __init__() 函数中调用的方法进行单元测试?

regex - Jenkins 工作过滤器正则表达式不起作用