如何替换regex,其中替换是搜索关键字/标记的函数

2024-10-04 11:30:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在Python中替换regex,其中替换是标记后缀的函数

假设我有一个文本(或XML),我可以在其中定义自己要替换的标记。以下是文本示例:

  <del:DeliveryFormat>A</del:
  <del:ReadingStartDate>%%%NOW@0@%Y-%m-%dT%H:%M:%SZ%%%</del:ReadingStartDate>
  <del:SpSla />
  <del:RecordPosition>1</del:RecordPosition>
  <del:Values>
    <del:Value position="1" registrationDate="2019-02-01T05:09:11.000+00:00" requestedReadingDate="%%%NOW@-1@%Y-%m-%dT%H:%M:%SZ%%%" reading="126.0" status="10" meterReadingId="677947381" />
  </del:Values>

请注意:我可以自由选择标签格式,我只选择了“%%”

请注意这两个(实际上更多)不同的标签:

"%%%NOW@0@%Y-%m-%dT%H:%M:%SZ%%%"我想用现在减去0天的日期替换它,并使其成为Y-%m-%dT%H:%M:%SZ格式

"%%%NOW@-1@%Y-%m-%dT%H:%M:%SZ%%%"我想用现在减去1天的日期替换它,并使其成为Y-%m-%dT%H:%M:%SZ格式

格式可能每次都不同,所以它必须来自标签本身

对于此操作,只有标记公共部分(%%%现在)和结束部分(%%%)的开始。标签的后缀应该是灵活的,我想有逻辑(函数)来定义如何替换它的基础上,后缀

我没有任何代码可以显示-当然,我已经很容易地创建了如何用特定格式的date-time替换%%%NOW%%%。但如何使替换值和格式成为标签后缀的函数-我不知道:(

当然,我可以通过循环/替换多个搜索来解决这个问题,比如%%%NOW@0@%Y-%m-%dT%H:%M:%SZ, %%%NOW@-1@%Y-%m-%dT%H:%M:%SZ, %%%NOW@-2@%Y-%m-%dT%H:%M:%SZ,等等。。。包括不同格式的字符串。但这能用智慧之美来实现吗


Tags: 函数标记文本定义格式标签xml后缀
1条回答
网友
1楼 · 发布于 2024-10-04 11:30:34

我是这样解决的:

output_file_as_string = re.sub("%%%([a-zA-Z]+)@(.?\\d)@([^>]*)%%%", lambda match: Helpers.add_step_to_time(NOW,"day",int(match.group(2))).strftime(match.group(3)), input_file_as_string)
#input_file_as_string = <del:ReadingStartDate>%%%NOW@-2@%Y-%m-%dT%H:%M:%S+01Z%%%</del:ReadingStartDate>
#output_file_as_string = <del:ReadingStartDate>2019-06-11T12:20:47+01Z</del:ReadingStartDate>

其中“add\u step\u to\u time”是我的代码中已经存在的函数

相关问题 更多 >