包含中文标点的全字符Unicode范围查询及Python正则匹配提取问题
包含标点的中文相关Unicode完整范围
你之前列的仅为CJK表意汉字的范围,中文常用标点属于独立的Unicode分区,完整的中文语境常用字符范围如下:
- CJK表意汉字全区间:你列出的基本区、扩展A-D区、兼容区12个表意字符
- CJK符号与标点区(包含直角引号、顿号、书名号、间隔号等):
\u3000-\u303F - 全角字符区(包含全角问号
\uFF1F、全角感叹号\uFF01、全角逗号、全角句号、全角括号等):\uFF00-\uFFEF - 可选(如有拼音/注音匹配需求):拼音/注音区间
\u3100-\u312F
正则匹配失败问题修复
你原正则的捕获组字符集未包含全角问号、感叹号,因此匹配到汉字部分就中断,导致整体匹配失败。有两种修复方案:
方案1:原生re模块(无需第三方依赖)
把缺失的中文标点范围加入字符集即可,修正后代码如下:
import re sample3 = "「在看星星嗎?閣下!」" # 字符集加入全角标点、CJK符号区间 result = re.search(r"\u300c([\u4e00-\u9fff\u31c0-\u31ef\u31f0-\u31ff\u3200-\u32ff\u3300-\u33ff\u3400-\u4dbf\u4dc0-\u4dff\u3000-\u303f\uff00-\uffef]+)\u300d", sample3) if result: print(result.group(1)) # 输出:在看星星嗎?閣下!
方案2:使用第三方regex库(写法更简洁)
如果允许安装依赖,可使用支持Unicode属性匹配的regex库,直接匹配中文汉字和标点,无需手动写范围:
首先执行安装命令:pip install regex
代码如下:
import regex sample3 = "「在看星星嗎?閣下!」" # \p{Han}匹配所有CJK汉字,\p{P}匹配所有标点 result = regex.search(r"\u300c([\p{Han}\p{P}]+)\u300d", sample3) if result: print(result.group(1)) # 输出:在看星星嗎?閣下!
内容的提问来源于stack exchange,提问作者Raptor
相关产品推荐
相关产品推荐

