首页 > 其他分享 >`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)“

时间:2024-09-27 14:52:02浏览次数:3  
标签:JPY 匹配 fen pattern 捕获 CNY 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() 能将相关的信息(如金额及单位)紧密地结合在一起,便于后续处理。
  • 多组提取:通过多个捕获组,可以提取多个不同的信息。这使得正则表达式非常灵活,可以适应不同的匹配需求。

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

标签:JPY,匹配,fen,pattern,捕获,CNY,pence,正则表达式,元组
From: https://blog.csdn.net/weixin_43837522/article/details/142593656

相关文章

  • 2024年模式识别与图像分析国际学术会议(PRIA 2024) 2024 International Conference on P
    文章目录一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题六、咨询一、会议详情二、重要信息大会官网:https://ais.cn/u/vEbMBz提交检索:EICompendex、IEEEXplore、Scopus2024年10月18-20日南京三、大会介绍2024年模式识别与图像分析国际学术会......
  • Camera ITS场景0_test_solid_color_test_pattern测试失败
    也会导致cts中CtsSensorPrivacyTestCases模块中两个单项报错,testOpStartsRunningAfterStartedWithSensoryPrivacyEnabledtestOpGetsRecordedAfterStartedWithSensorPrivacyEnabled这两项metadata加上MTK_SENSOR_TEST_PATTERN_MODE_OFF,MTK_SENSOR_TEST_PATTERN_MODE_BLACK就......
  • Cisco Secure Firewall Threat Defense Virtual 7.6.0 发布下载,新增功能概览
    CiscoSecureFirewallThreatDefenseVirtual7.6.0-思科下一代防火墙虚拟设备(FTDv)FirepowerThreatDefense(FTD)SoftwareforESXi&KVM请访问原文链接:https://sysin.org/blog/cisco-firepower-7/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgCiscoSe......
  • 使用 ts-pattern 转换您的代码
    ts-pattern是一个typescript库,它提供了称为模式匹配的函数式编程概念。它可以通过多种方式显着提高代码可读性:简化条件语句ts-pattern用简洁且富有表现力的模式匹配替换复杂的if-else链或switch语句。减少样板代码它消除了重复检查和类型保护的需要,使您的代码更加紧凑。改......
  • CVPR(Conference On Computer Vision and Pattern Recognition)近十年研究热点追踪
    CVPR(ConferenceOnComputerVisionandPatternRecognition)近十年研究热点追踪CVPR近十年(2015~2024)研究热点追踪......
  • 单例模式 (Singleton Pattern) - 设计模式精讲·面试必备
    前言最近整理了一份设计模式手册:从入门到精通的实用指南。坦白说,我对网上那些过于理论化的教程感到有些失望。于是决定亲自动手,从基础概念到实际应用,把常用的设计模式都梳理了一遍。每种模式不仅包含核心原理,还附带了真实的代码示例,希望能帮助大家更好地理解和运用......
  • 原型模式(Prototype Pattern)
    原型模式是一种创建型设计模式,使用克隆方法来复制现有对象,从而避免重复的初始化操作,特别适用于创建重复对象的场景。适用场景:当一个系统需要创建新对象的对象系统中,可通过克隆一个原型并对其进行改造。当对象的创建成本比较大(如复杂的初始化)时。示例代码:abstractclassSha......
  • C# 设计模式:适配器模式(Adapter Pattern)
    摘要适配器模式是一种结构型设计模式,它允许不兼容的接口之间能够相互合作。这种模式涉及到一个单独的类,它负责加入独立的或不兼容的接口功能。简单来说,适配器模式就是一个中间件,它使得原本由于接口不兼容而不能一起工作的类可以一起工作。正文应用场景适配器模式通常应用于以下情况......
  • 设计模式-解释器模式-Interpreter Pattern
    系列文章目录总目录链接文章目录系列文章目录总目录链接设计模式-解释器模式-InterpreterPatternOverview1.解释器模式(InterpreterPattern)1.1.组成要素1.2.适用场景1.3.优点1.4.缺点1.5.示例代码(C++)2.解释器模式优缺点2.1.优点2.2.缺点3.解释器模式在实际开发中......
  • A Walkthrough Using Acquire and Release Fences
    We’lltaketheexamplefrommypreviouspostandmodifyittouseC++11’sstandaloneacquireandreleasefences.Here’stheSendTestMessagefunction.Theatomicwriteisnowrelaxed,andareleasefencehasbeenplacedimmediatelybeforeit.voidSen......