当前位置: 首页 > news >正文

`pattern = r“(\d+)(CNY|JPY|HKD|EUR|GBP|fen|cents|sen|eurocents|pence)“

pattern = r"(\d+)(CNY|JPY|HKD|EUR|GBP|fen|cents|sen|eurocents|pence)" 是一个正则表达式,用于匹配特定格式的字符串。

正则表达式解析

  1. 整体结构

    • r"...":前缀 r 表示这是一个原始字符串(Raw String),在原始字符串中,反斜杠(\)不会被视作转义字符,这样可以更方便地编写正则表达式。
  2. 括号 (...):用来分组,即捕获匹配的部分。正则表达式中的捕获组将匹配的文本存储在一个元组中,可以在代码中使用。

  3. \d+

    • \d 代表数字字符,等效于 [0-9]
    • + 表示前面的表达式(即 \d)可以出现一次或多次(即至少一个数字)。所以 \d+ 匹配一个或多个数字。
  4. (CNY|JPY|HKD|EUR|GBP|fen|cents|sen|eurocents|pence)

    • | 表示“或”的意思。这部分的意思是匹配一个货币单位,可以是 CNYJPYHKDEURGBPfencentsseneurocentspence 中的任意一个。

用法

  • 在代码中,这个正则表达式用于匹配每一行中的金额和货币单位。
  • re.findall(pattern, line) 会在每个字符串 line 中查找所有与正则表达式模式匹配的部分。返回值是一个匹配结果的列表,其中每一个元素都是一个包含金额和单位的元组。例如,("100", "CNY")

总结

这个正则表达式的作用是从输入的每一行中提取出金额及其对应的货币单位,然后在后续的处理逻辑中使用这些提取出的数据。通过将匹配到的数量和单位进行相关计算,最终实现汇总所有金额的功能。

在使用正则表达式的 re.findall() 函数时,返回元组的原因与正则表达式的分组(Capture Groups)特性密切相关。

理解捕获组

  1. 捕获组概念

    • 当在正则表达式中使用括号 () 时,所包含的部分被称为捕获组。捕获组用于提取正则表达式中的特定部分。
    • 如果在正则表达式中有多个捕获组,那么每个捕获组会单独捕获到相应的匹配内容。
  2. 返回值结构

    • 使用 re.findall(pattern, string) 时,返回所有匹配的结果。
    • 如果模式中没有使用捕获组,findall 会返回所有匹配的字符串列表。
    • 如果模式中包含一个或多个捕获组,findall 将返回每个匹配的捕获组内容,形成一个元组列表。每个元组代表一个匹配,其中包含为每个捕获组捕获到的值。

示例解释

假设我们有一个字符串:

text = "I have 100 CNY and 200 JPY."

在应用你的正则表达式:

pattern = r"(\d+)(CNY|JPY|HKD|EUR|GBP|fen|cents|sen|eurocents|pence)"

执行:

result = re.findall(pattern, text)

该结果 result 将是:

[('100', 'CNY'), ('200', 'JPY')]
  • 这里,('100', 'CNY') 是第一个匹配,包含了金额和货币单位。
  • ('200', 'JPY') 是第二个匹配。

返回元组的优势

  • 结构化数据:通过返回元组,findall() 能将相关的信息(如金额及单位)紧密地结合在一起,便于后续处理。
  • 多组提取:通过多个捕获组,可以提取多个不同的信息。这使得正则表达式非常灵活,可以适应不同的匹配需求。

总之,返回元组的设计使得正则表达式在处理复杂的文本匹配和提取时更加高效和方便。

http://www.lryc.cn/news/447604.html

相关文章:

  • 宝塔面板部署雷池社区版教程
  • 【击败100%】258. 各位相加
  • 【alist】宝塔面板docker里的alist默认admin无法登录
  • 【击败100%】1281. 整数的各位积和之差
  • Flink基本概念和算子使用
  • Kafka 3.0.0集群部署教程
  • 昇思MindSpore进阶教程-格式转换
  • 搜索软件 Everything 的安装与使用教程
  • oracle 如何判断当前时间在27号到当月月底
  • Django 配置邮箱服务,实现发送信息到指定邮箱
  • Git使用手册
  • sql-labs靶场
  • 【Redis入门到精通二】Redis核心数据类型(String,Hash)详解
  • 如何快速免费搭建自己的Docker私有镜像源来解决Docker无法拉取镜像的问题(搭建私有镜像源解决群晖Docker获取注册表失败的问题)
  • QT 获取视频帧Opencv获取清晰度
  • 生成式AI如何辅助医药行业智能营销
  • 演示:基于WPF的DrawingVisual开发的Chart图表和表格绘制
  • 汽车保养BBBBBBBBBBB
  • H3C R4900 G3服务器上配置本地磁盘RAID
  • HBase DDL操作代码汇总(namespace+table CRUD操作)
  • 关于TCP的基础知识
  • MyBatis 中的类型别名配置详解
  • 如何提高UI自动化的稳定性
  • ubuntu如何开启和关闭图形界面
  • 从博客到ICT社区:深化学习与交流的桥梁
  • 基于python+django+vue的旅游景点数据分析系统
  • C++简单缓冲区类设计
  • MySQL 数据库
  • 基于单片机的智能校园照明系统
  • 高性能分布式搜索引擎Elasticsearch详解