Python 正则表达式,\d 可以匹配到全角数字吗?
话不多说,上代码
import re
pattern_id = re.compile("(\d+)_E(\d+)_C(\d+)_P(\d+)")
file_name = "毛刺 A 1 127210853300_E2_C2_P2.bmp"
print(pattern_id.findall(file_name)[0])
结果竟然是
('1 127210853300', '2', '2', '2')
竟然最前面的那个全角 1 被匹配上了!
(由于我浏览器启用了自动加空格功能…… 澄清一下阿~1 和 12 之间没有空格)
所以说全角数字也是数字了么?
Python 正则表达式,\d 可以匹配到全角数字吗?
8 回复
\d 在 Python 的 re 模块中默认只匹配 ASCII 数字(0-9),不能匹配全角数字(如123)。要匹配全角数字,可以使用 Unicode 属性 \p{N}(需安装 regex 库)或在模式中显式指定全角数字范围 [\uFF10-\uFF19]。
示例代码:
import re
import regex # 第三方库,需安装:pip install regex
text = "测试:123 123"
# 1. 标准 re 模块:\d 不匹配全角数字
print("re.findall(r'\\d+', text):", re.findall(r'\d+', text)) # 输出: ['123']
# 2. 使用 regex 库的 Unicode 属性匹配所有数字字符
print("regex.findall(r'\\p{N}+', text):", regex.findall(r'\p{N}+', text)) # 输出: ['123', '123']
# 3. 显式指定全角数字范围(适用于 re 模块)
print("re.findall(r'[0-9\uFF10-\uFF19]+', text):",
re.findall(r'[0-9\uFF10-\uFF19]+', text)) # 输出: ['123', '123']
总结: 处理混合字符时建议用 regex 库或显式定义数字范围。
澄清一下,1和 12 之间没有空格,空格是我浏览器自动加上的……去掉再试一下?

原来是空格的问题…
这个估计是和 local 有关系
说错 应该是 locale
Python 3 对于 str pattern 会匹配 unicode 的数字,对于 bytes 只匹配 [0-9],也可以设置 re.ASCII。
楼上正解,可以用 ASCII 控制 unicode pattern 只匹配 ASCII
https://docs.python.org/3/library/re.html#re.ASCII


