gpt4 book ai didi

Python 2 与 Python 3 正则表达式匹配行为

转载 作者:太空宇宙 更新时间:2023-11-04 08:58:22 26 4
gpt4 key购买 nike

python 3

import re

P = re.compile(r'[\s\t]+')
re.sub(P, ' ', '\xa0 haha')
' haha'

python 2

import re

P = re.compile(r'[\s\t]+')
re.sub(P, u' ', u'\xa0 haha')
u'\xa0 haha'

我想要 Python 3 的行为,但在 Python 2 代码中。为什么正则表达式模式无法在 Python 2 中匹配类似空格的代码点(如 \xa0),但在 Python 3 中却能正确匹配这些代码点?

最佳答案

使用re.UNICODE标志:

>>> import re
>>> P = re.compile(r'[\s\t]+', flags=re.UNICODE)
>>> re.sub(P, u' ', u'\xa0 haha')
u' haha'

没有标志,只匹配ASCII空格; \xa0 不是 ASCII 标准的一部分(它是 Latin-1 代码点)。

re.UNICODE 标志是 Python 3 中的默认标志;使用 re.ASCII如果您想拥有 Python 2(bytestring)行为。

请注意,在字符类中包含 \t 没有意义; \t 已经是 \s 类的一部分,因此以下将匹配完全相同的输入:

P = re.compile(r'\s+', flags=re.UNICODE)

关于Python 2 与 Python 3 正则表达式匹配行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28088385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com