首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python 2和Python 3之间re模块的更改

Python 2和Python 3之间re模块的更改
EN

Stack Overflow用户
提问于 2014-01-17 05:18:58
回答 3查看 3.1K关注 0票数 1

我正在用Python3在Python 2下开发的代码上运行我的单元测试套装。所有的单元测试都是在Python2下通过的,但对于Python3却没有。re的实现似乎有了一些变化,这对我来说真是太麻烦了。下面是一个复制我的问题的最小的工作示例:

代码语言:javascript
运行
复制
Python 2.7.6 (default, Dec 10 2013, 20:01:46) 
>>> import re
>>> a = re.compile('test', re.IGNORECASE)
>>> assert a.flags == re.IGNORECASE
>>> # No output,  i.e. assertion passed
>>> a.flags
2
>>> re.IGNORECASE
2

代码语言:javascript
运行
复制
Python 3.3.3 (default, Dec 10 2013, 20:13:18)
>>> import re
>>> a = re.compile('test', re.IGNORECASE)
>>> assert a.flags == re.IGNORECASE
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError
>>> a.flags
34
>>> re.IGNORECASE
2

显然发生了一些我不希望发生的事情!我假设有一组默认标志可以使flags在python3中为34。我想知道的是这些是什么,这样我就可以通过与适当的标志进行比较来传递我的断言。作为奖励,这样做的目的是什么?

EN

Stack Overflow用户

发布于 2014-01-17 05:28:47

这是因为在Python3中,字符串是unicode,因此默认情况下UNICODE标志是有意义的。

Python 3:

代码语言:javascript
运行
复制
>>> a = re.compile("a")
>>> a.flags
32
>>> [k for k in dir(re) if getattr(re, k) == 32]
['U', 'UNICODE']
票数 3
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21178424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档