首页 > 编程问答 >Python字符串:提取重复和随机合并的子字符串

Python字符串:提取重复和随机合并的子字符串

时间:2024-07-23 13:55:53浏览次数:14  
标签:python string pdf duplicates extract

重复和合并字符串的示例:

16.01068.0%0 8p%.a .p .a.

要提取的所需子字符串:

16.008% p.a.

完整示例:

CCoonnttiinnggeenntt CCoouuppoonn 16.01068.0%0 8p%.a .p (.Ma.o (nMtholyn)thly)

所需子字符串:

Contingent Coupon 16.008% p.a. (Monthly)

我的问题是当原始子字符串已经包含重复字符时(例如两个 0 ) in 16.008 ),我当前的函数有时会保留错误的重复字符(给出错误的结果 16.080 )。


import re

def extract_substring(text):
  """从包含重复和随机合并字符的字符串中提取子字符串。

  Args:
    text: 要从中提取子字符串的字符串。

  Returns:
    提取的子字符串,如果没有找到匹配的子字符串,则返回 None。
  """

  # 使用正则表达式查找子字符串。
  match = re.search(r'(\d+\.\d+)\d*(\.\d+)?\s*%?\s*(p\.\s*a\.)\s*\(?(\w+)?\)?', text, re.IGNORECASE)

  # 如果找到匹配项,请使用找到的组重建子字符串。
  if match:
    # 使用 group(1) 和 group(2) 获取可能的小数部分来重建数字部分。
    number = match.group(1)
    if match.group(2):
      number += match.group(2)

    # 从匹配的组中组合子字符串。
    substring = f"{number}% {match.group(3)}"
    if match.group(4):
      substring += f" ({match.group(4).capitalize()})"
    return substring
  else:
    return None

# 示例用法
text = "CCoonnttiinnggeenntt CCoouuppoonn 16.01068.0%0 8p%.a .p (.Ma.o (nMtholyn)thly)"
substring = extract_substring(text)
print(substring)  # 输出:Contingent Coupon 16.008% p.a. (Monthly)

此代码执行以下操作:

  1. 使用正则表达式:
  2. (\d+\.\d+)\d*(\.\d+)? 匹配数字部分,允许重复的数字和可选的第二个小数部分。
  3. \s*%?\s* 匹配可选的百分号及其周围的空格。
  4. (p\.\s*a\.) 匹配 "p.a.",允许字母之间有空格。
  5. \s*\(?(\w+)?\)? 匹配可选的括号及其中的单词。
  6. 重建子字符串:
  7. 它使用匹配的组来重建子字符串,确保数字部分仅包含必要的数字,并正确格式化其他部分。
  8. 处理可选部分:
  9. 它处理可选的第二个小数部分和括号中的单词,如果存在则将它们包含在最终子字符串中。

此改进后的代码应能正确提取子字符串,即使原始字符串包含重复的数字,因为它使用正则表达式明确定义了要匹配的模式,并且仅使用匹配的组来重建最终子字符串。

标签:python,string,pdf,duplicates,extract
From: 78780076

相关文章

  • Python Pandas 从使用第 3 部分 API 自动生成的 Excel 文件中读取不一致的日期格式
    我正在使用PDF4meAPI将PDF发票转换为Excel文件。API可以正确读取日期。但是,当我打开Excel文件时,日期显示不一致:某些日期以正确的格式(dd/mm/yyyy)显示,而其他日期以错误的mm/dd/yyyy格式显示。当该月的某天小于或等于12时,似乎会出现这种不一致。......
  • python-input键盘输入
     str=input("请输入:")#用户键盘输入#str表示一个字符串类型的变量,input会将读取到的字符串放入str中print(str) aa='请输入:'str=input(aa)#用户键盘输入#str表示一个字符串类型的变量,input会将读取到的字符串放入str中print(str)      ......
  • Python从0到100(四十五):从字符串到前后端分离
    前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知......
  • Python的运算符与条件表达式
    一、运算符Python数据是通过使用运算符来进行操作的,与数学运算符类似,主要运用于数字计算,比较大小和逻辑运算。Python中的运算符主要包括算术运算符、赋值运算符、比较运算符、逻辑运算符和位运算符。1.算术运算符算术运算符用在数字表达式中,作用和在数学中是一样的。Python......
  • 在尝试使用 docker 运行基于 pythonnet 的项目时,找不到 C# 运行时
    屏幕截图我不断收到此错误:RuntimeError:Failedtocreateadefault.NETruntime,whichwouldhavebeen"mono"onthissystem.Eitherinstallacompatibleruntimeorconfigureitexplicitlyvia......
  • Python 在模块中使用变量
    如何将一个文件中声明的变量调用到另一个文件中?大家好我已经在file1中声明了我的变量。我的函数位于file2中,它使用该变量。如何调用主文件中声明的变量。提前致谢当然可以!以下是如何在Python中跨文件使用变量:file1.py(包含变量的文件)#在file1.p......
  • Python 类型提示和 linter
    我一直在向我们的python项目添加静态类型检查,例如像这样:fromtypingimportListfromsomethingimportMyOtherClassclassMyClass:def__init__(self)->None:self.some_var=None#type:List[MyOtherClass]但是,现在我们使用的linter(flake8和......
  • eclipse如何写python程序
    本文主要介绍在Windows系统环境下,搭建能在Eclipse中运行python程序的环境。一、Eclipse下载与安装:Eclipse是写JAVA的IDE,下载地址为:http://www.eclipse.org/downloads/下载安装,网上教程很多,不赘述。二、pydev插件下载与安装:启动Eclipse,点击Help—>EclipseMarketplace......
  • 运行 python 3 代码时出现 python 2 语法错误
    我有一个如下所示的类classExperimentResult(BaseDataObject):def__init__(self,result_type:str,data:dict,references:list):super().__init__()self.type=result_typeself.references=referencesself.data=data......
  • 如何让 python 类型检查器知道它应该返回其类的新实例?
    我想使用classmethod返回当前类的新实例,并且我尝试了如下代码,但它引发了NameError('name'T'isnotDefined')PutthecodeT=TypeVar('T',bound=A)on|||以上也不起作用。classA有什么好主意来处理它吗?Isthereanygoodideatohandleit?......