使用Python匹配中文数字的方法详解

 更新时间:2026年04月01日 08:26:59   作者:detayun  
在处理中文文本时,经常需要识别或提取 中文数字,Python 的正则表达式(re 模块)可以高效地完成这一任务,本文将介绍 如何用 Python 匹配中文数字,需要的朋友可以参考下

引言

在处理中文文本时,经常需要识别或提取 中文数字(如 一、二、三、十、百、千 等)。Python 的正则表达式(re 模块)可以高效地完成这一任务。本文将介绍 如何用 Python 匹配中文数字,包括 基本匹配、范围匹配、严格匹配 以及 常见应用场景

1. 什么是中文数字?

中文数字包括:

  • 基本数字零、一、二、三、四、五、六、七、八、九
  • 十进制单位十、百、千、万、亿
  • 组合形式十一、二十、一百、一千、一万
  • 大写数字(财务常用):壹、贰、叁、肆、伍、陆、柒、捌、玖

本文主要讨论 基本中文数字)的匹配,但方法可以扩展到更复杂的数字。

2. 基本匹配:单个中文数字

2.1 匹配一到十

使用 [一二三四五六七八九十] 可以匹配单个中文数字:

import re

text = "一二三、四五六、七八九十"
pattern = r'[一二三四五六七八九十]'

matches = re.findall(pattern, text)
print(matches)  # 输出: ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十']

2.2 匹配零到九

如果只需要 (不包括 ):

pattern = r'[零一二三四五六七八九]'
matches = re.findall(pattern, "零一二三四五六七八九")
print(matches)  # 输出: ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']

3. 范围匹配:一到十的多个数字

3.1 匹配1~3个中文数字

使用 {1,3} 限定匹配 1~3 个 中文数字:

text = "一二三、四五六、七八九十、十一"
pattern = r'[一二三四五六七八九十]{1,3}'

matches = re.findall(pattern, text)
print(matches)  # 输出: ['一二三', '四五六', '七八九', '十', '十一']

问题十一 被拆分成 (因为 {1,3} 是贪婪匹配)。

3.2 严格匹配1~3个连续中文数字

如果希望 十一 被视为一个整体,可以:

pattern = r'(?:[一二三四五六七八九]|十[一二三四五六七八九]?){1,3}'
matches = re.findall(pattern, "一二三、四五六、七八九十、十一")
print(matches)  # 输出: ['一二三', '四五六', '七八九十', '十一']

解释

  • [一二三四五六七八九] → 匹配
  • 十[一二三四五六七八九]? → 匹配 十一十九
  • (?:...) → 非捕获分组(仅匹配,不提取)
  • {1,3} → 匹配 1~3 次

4. 严格匹配:一到九十九

4.1 匹配1~99的中文数字

中文数字 1~99 的规则:

  • 1~9
  • 10~19十九
  • 20~99二十九十九(但 二十 不能写成 二二十

正则表达式:

pattern = r'^([一二三四五六七八九]|十[一二三四五六七八九]?|二十|三十|四十|五十|六十|七十|八十|九十)$'

优化版(更简洁):

pattern = r'^([一二三四五六七八九]|十[一二三四五六七八九]?|[二三四五六七八九十]十)$'
matches = re.findall(pattern, ["一", "十", "十一", "二十", "九十九", "一百"])
print(matches)  # 输出: ['一', '十', '十一', '二十', '九十九']

问题一百 不匹配(因为超出范围)。

4.2 更通用的1~99匹配

pattern = r'^([一二三四五六七八九]|十[一二三四五六七八九]?|[二三四五六七八九十]十|[二三四五六七八九十][一二三四五六七八九])$'
matches = re.findall(pattern, ["一", "十", "十一", "二十", "二十一", "九十九", "一百"])
print(matches)  # 输出: ['一', '十', '十一', '二十', '二十一', '九十九']

解释

  • [一二三四五六七八九]1~9
  • 十[一二三四五六七八九]?10~19
  • [二三四五六七八九十]十20~90(如 二十三十
  • [二三四五六七八九十][一二三四五六七八九]21~99(如 二十一九十九

5. 匹配中文数字 + 标点符号

5.1 匹配一、二.三等

常见场景:章节标题、编号(如 一、 二. )。

text = "一、引言 二.背景 三 方法"
pattern = r'([一二三四五六七八九十]+)[、. ]'

matches = re.findall(pattern, text)
print(matches)  # 输出: ['一', '二', '三']

优化版(匹配整个编号 + 标点):

pattern = r'([一二三四五六七八九十]+)[、. ]'
for match in re.finditer(pattern, text):
    print(f"数字: {match.group(1)}, 标点: {match.group(2)}")

输出

数字: 一, 标点: 、
数字: 二, 标点: .
数字: 三, 标点:  

5.2 严格匹配一、十.二十一

text = "一、 十. 二十一 二十二、 九十九. 一百"
pattern = r'([一二三四五六七八九]|十[一二三四五六七八九]?|[二三四五六七八九十][一二三四五六七八九]?)[、. ]'

matches = re.findall(pattern, text)
print(matches)  # 输出: ['一', '十', '二十一', '二十二', '九十九']

6. 完整代码示例

6.1 匹配1~99的中文数字

import re

def match_chinese_numbers(text):
    pattern = r'([一二三四五六七八九]|十[一二三四五六七八九]?|[二三四五六七八九十]十|[二三四五六七八九十][一二三四五六七八九])'
    matches = re.findall(pattern, text)
    return matches

text = "一 十 十一 二十 二十一 九十九 一百"
print(match_chinese_numbers(text))  # 输出: ['一', '十', '十一', '二十', '二十一', '九十九']

6.2 匹配中文数字 + 标点符号

def match_chinese_numbers_with_punctuation(text):
    pattern = r'([一二三四五六七八九十]+)[、. ]'
    matches = []
    for match in re.finditer(pattern, text):
        matches.append((match.group(1), match.group(2)))
    return matches

text = "一、引言 十.背景 二十一 方法"
print(match_chinese_numbers_with_punctuation(text))
# 输出: [('一', '、'), ('十', '.'), ('二十一', ' ')]

7. 总结

需求正则表达式示例匹配
匹配 [一二三四五六七八九十], ,
匹配 1~3 个中文数字[一二三四五六七八九十]{1,3}一二三,
匹配 1~99 的中文数字`([一二三四五六七八九]十[一二三四五六七八九]?
匹配 一、 十. 二十一 ([一二三四五六七八九十]+)[、. ]一、, 十., 二十一

关键点

  1. 基本匹配[一二三四五六七八九十] 匹配单个数字。
  2. 范围匹配{1,3} 限定匹配 1~3 个数字。
  3. 严格匹配:使用 十[一二三四五六七八九]? 匹配 10~19
  4. 标点符号匹配[、. ] 匹配 . 或空格。

8. 扩展应用

  • 中文数字转阿拉伯数字(如 "二十三"23
  • 提取中文金额(如 "壹佰贰拾叁元"123
  • 自然语言处理(NLP) 中的中文数字识别

以上就是使用Python匹配中文数字的方法详解的详细内容,更多关于Python匹配中文数字的资料请关注脚本之家其它相关文章!

相关文章

  • 读取本地json文件,解析json(实例讲解)

    读取本地json文件,解析json(实例讲解)

    下面小编就为大家分享一篇读取本地json文件,解析json的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • 使用Python操作字节流中的Excel文档

    使用Python操作字节流中的Excel文档

    这篇文章将为大家详细介绍如何使用Python创建和保存Excel文件到字节流,以及读取和修改字节流中的Excel文件,感兴趣的小伙伴可以参考一下
    2025-01-01
  • Python中的pprint打印模块

    Python中的pprint打印模块

    这篇文章主要介绍了Python中的pprint打印模块,​​pprint()​​采用分行打印输出,下文关于其相关介绍,需要的小伙伴可以参考一下
    2022-05-05
  • Jinja2过滤器的使用、控制语句示例详解

    Jinja2过滤器的使用、控制语句示例详解

    在Python中,如果需要对某个变量进行处理,我们可以通过函数来实现,这篇文章主要介绍了Jinja2过滤器的使用、控制语句,需要的朋友可以参考下
    2023-03-03
  • 使用清华大学镜像源安装Python库的详细教程

    使用清华大学镜像源安装Python库的详细教程

    在Python开发中,安装第三方库是必不可少的一步,然而,由于网络原因,直接从官方PyPI源安装库可能会非常缓慢,甚至失败,为了解决这一问题,许多国内镜像源提供了更快的下载速度,本文将详细介绍如何使用清华大学镜像源来安装Python库,需要的朋友可以参考下
    2025-05-05
  • 让你一文弄懂Pandas文本数据处理

    让你一文弄懂Pandas文本数据处理

    文本数据具有数据维度高、数据量大且语义复杂等特点,是一种较为复杂的数据类型,下面这篇文章主要给大家介绍了关于Pandas文本数据处理的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-08-08
  • python游戏实战项目之智能五子棋

    python游戏实战项目之智能五子棋

    下五子棋吗?信不信我让你几步你也赢不了?本篇为你带来用python编写的五子棋小游戏,文中给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值
    2021-09-09
  • 使用Python请求http/https时如何设置失败重试次数

    使用Python请求http/https时如何设置失败重试次数

    这篇文章主要介绍了使用Python请求http/https时如何设置失败重试次数问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • python使用XPath解析数据爬取起点小说网数据

    python使用XPath解析数据爬取起点小说网数据

    这篇文章主要介绍了python使用XPath解析数据爬取起点小说网数据,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-04-04
  • Python中文分词工具之结巴分词用法实例总结【经典案例】

    Python中文分词工具之结巴分词用法实例总结【经典案例】

    这篇文章主要介绍了Python中文分词工具之结巴分词用法,结合实例形式总结分析了Python针对中文文件的读取与分词操作过程中遇到的问题与解决方法,需要的朋友可以参考下
    2017-04-04

最新评论