You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 2.7中如何正确使用re.UNICODE标志?

哦,我一眼就看到问题啦——你把re.UNICODE传错地方了!

问题根源

re.findall()的第二个参数不是正则标志位,而是匹配的起始位置(默认值为0)。你传入的re.UNICODE对应数值是4,相当于让程序从字符串的第4个字符之后开始查找,自然找不到任何内容,所以返回空列表。

正确解决方法

有两种靠谱的写法,任选其一就行:

1. 预编译正则时指定re.UNICODE

编译正则表达式时把标志位传进去,之后调用findall不需要再额外传参数:

import re
r = re.compile(ur"(\w+)", re.UNICODE)
r.findall(u"test test test")  # 这里不用传re.UNICODE!
# 输出: [u'test', u'test', u'test']

2. 直接调用re.findall()时传标志位

如果不用预编译,需要把re.UNICODE作为第三个参数传给findall:

import re
re.findall(ur"(\w+)", u"test test test", re.UNICODE)
# 输出: [u'test', u'test', u'test']

验证Unicode字符处理效果

咱们来测试带非ASCII字符的场景,看看re.UNICODE的作用:

r = re.compile(ur"(\w+)", re.UNICODE)
r.findall(u"café 北京 123 _abc")
# 输出: [u'café', u'北京', u'123', u'_abc']

如果不加re.UNICODE,Python 2里的\w只会匹配ASCII字母、数字和下划线,上面的例子就会返回[u'123', u'_abc'],其他Unicode字符都会被当成非单词字符分割开。

内容的提问来源于stack exchange,提问作者faiuwle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:09:38