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

如何使用Python 2.7.x正则表达式匹配所有Unicode空格?

解决Python 2.7.x中的Unicode空格匹配问题

在Python 2.7.x里处理Unicode空格匹配确实容易踩坑——默认正则的\s字符类看起来能匹配“所有空格”,但实际上只覆盖了ASCII范围内的空白字符(空格、制表符、换行符等),像日语里的全角空格(\u3000)、非断空格(\u00A0)这类Unicode空格根本匹配不到。正则引擎通常通过Unicode属性(扩展字符类别)来解决这类问题,但Python 2.7的实现有自己的特点,下面分享两种实用方案:

方案1:启用re.UNICODE扩展标志

给正则表达式加上re.U(或re.UNICODE)标志后,\s会扩展匹配所有Unicode标准定义的空白字符,刚好能覆盖那些特殊的Unicode空格。示例代码:

import re

# 包含日语全角空格的Unicode文本
text = u"Hello 世界"
# 启用Unicode模式编译正则
pattern = re.compile(r"\s", re.UNICODE)
# 查找所有空格
matches = pattern.findall(text)
print(matches)  # 输出: [u'\u3000']

方案2:手动构建Unicode空格字符集

如果需要更精准的控制(比如只匹配特定类别的空格),可以借助unicodedata模块筛选出所有Unicode空格字符,再构建自定义正则字符类:

import re
import unicodedata

# 筛选所有Unicode "分隔符-空格"类别(Zs)的字符
unicode_spaces = u''.join([
    unichr(codepoint) 
    for codepoint in range(0x10000) 
    if unicodedata.category(unichr(codepoint)) == 'Zs'
])
# 编译包含这些空格的正则
pattern = re.compile(r'[' + re.escape(unicode_spaces) + r']')

# 测试包含全角空格和非断空格的文本
text = u"Hello 世界\u00A0测试"
matches = pattern.findall(text)
print(matches)  # 输出: [u'\u3000', u'\u00A0']

这里的Zs是Unicode字符分类中的“分隔符-空格”类别,涵盖了绝大多数我们日常遇到的空格类字符,包括半角、全角空格等。

注意:Python 2.7的re模块不支持直接使用\p{Zs}这类Unicode属性语法,所以上面两种方法是最直接有效的实现方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:28:18