Python中正则表达式如何匹配和处理中文?
1. 说明
我本来是想匹配时间的,无意中发现包含中文的字符串,总体的匹配无法输出,就是 print m.group(0)和 print m.group(1)会报错,这是为什么呢?
2. CODE
# coding=utf-8
timestr= u"2018 年 3 月 28 日"
m = re.match(u"((\d+)年(\d+)月(\d+)日)", timestr)
print m.group(0)
print m.group(1)
print m.group(2)
print m.group(3)
Python中正则表达式如何匹配和处理中文?
7 回复
是不是括号包括号的问题
在Python里用正则处理中文,核心就两点:用re.UNICODE标志和正确匹配中文字符范围。
直接上代码示例,匹配中文字符和提取中文内容:
import re
# 示例文本
text = "Hello 世界!Python正则表达式测试。2024年。"
# 1. 匹配单个中文字符
pattern_single = re.compile(r'[\u4e00-\u9fff]', re.UNICODE)
chinese_chars = pattern_single.findall(text)
print("单个中文字符:", chinese_chars) # ['世', '界', '正', '则', '表', '达', '式', '测', '试', '年']
# 2. 匹配连续的中文字符串(包括中文标点)
pattern_words = re.compile(r'[\u4e00-\u9fff\u3000-\u303f\uff00-\uffef]+', re.UNICODE)
chinese_words = pattern_words.findall(text)
print("中文词语:", chinese_words) # ['世界', '正则表达式测试', '年']
# 3. 移除所有非中文字符(只保留中文)
chinese_only = re.sub(r'[^\u4e00-\u9fff\u3000-\u303f\uff00-\uffef]', '', text)
print("纯中文:", chinese_only) # '世界正则表达式测试年'
# 4. 分割中英文混合文本
mixed_text = "Python编程学习笔记2024"
split_result = re.split(r'([\u4e00-\u9fff]+)', mixed_text)
print("分割结果:", split_result) # ['Python', '编程', '学习', '笔记', '2024']
关键点说明:
\u4e00-\u9fff:匹配基本中文字符(CJK统一表意文字)\u3000-\u303f:匹配中文标点符号\uff00-\uffef:匹配全角字符re.UNICODE标志确保Unicode字符被正确处理
简单总结:用Unicode编码范围匹配,记得加re.UNICODE标志。
空格…
手滑直接回复了.
按照你的正则 m 是 None
>>> m.group
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
AttributeError: ‘NoneType’ object has no attribute 'group’
改成 m=re.match(u"((\d+) 年 (\d+) 月 (\d+) 日)", timestr)
就没有问题
我编辑的问题,字符串中原来应该没有空格,我仔细看了下,你好像没修改什么…
哦,你是加了空格,其实原来的字符串没空格 timestr= u"2018 年 3 月 28 日"
我擦,我发现报错的原因是使用了 VScode, 使用 cmd 调用 cpytohn 就可以了…

