python - 用python中的变量值替换具有特定格式的字符
问题描述
我有给定特定格式的文件名
II.NIL.10.BHZ.M.2058.190.160877
II.NIL.10.BHA.M.2008.190.168857
II.NIL.10.BHB.M.2078.198.160857
.
.
.
我想删除BH?.M
带有字符串变量中值的部分name
。
name=['T','D','FG'.....]
预期产出
II.NIL.10.BHT.2058.190.160877
II.NIL.10.BHD.2008.190.168857
II.NIL.10.BHFG.2078.198.160857
.
.
.
有可能str.replace()
吗?
解决方案
您可以使用内置的正则表达式模块 ( re
) 以及以下模式来有效地替换字符串中的内容。
图案
'(?<=BH)[A-Z]+\.M'
此模式向后查找(不匹配)以确保检查 substring 'BH'
,然后匹配任何大写字符[A-Z]
一次或多次,+
然后是 substring '.M'
。
解决方案
下面的解决方案re.sub()
与上面概述的模式一起使用,以返回一个字符串,其中的子字符串与模式匹配的子字符串替换为此处定义为replacement
.
import re
original = 'II.NIL.10.BHB.M.2078.198.160857'
replacement = 'FG'
output = re.sub(r'(?<=BH)[A-Z]+\.M', replacement, original)
print(output)
输出
II.NIL.10.BHFG.2078.198.160857
处理多个文件
要对多个文件重复此过程,您可以在循环/理解中应用上述逻辑,re.sub()
在每个original
/replacement
配对上运行该函数并适当地存储/处理。
下面的示例使用原始问题中的数据以及上述逻辑,re.sub()
通过原始文件名和要使用插入的子字符串之间的字典映射来创建一个包含每个操作结果的列表re.sub()
。
import re
originals = [
'II.NIL.10.BHZ.M.2058.190.160877',
'II.NIL.10.BHA.M.2008.190.168857',
'II.NIL.10.BHB.M.2078.198.160857'
]
replacements = ['T','D','FG']
mapping = {originals[i]: replacements[i] for i, _ in enumerate(originals)}
results = [re.sub(r'(?<=BH)[A-Z]+\.M', v, k) for k,v in mapping.items()]
for r in results:
print(r)
输出
II.NIL.10.BHT.2058.190.160877
II.NIL.10.BHD.2008.190.168857
II.NIL.10.BHFG.2078.198.160857
推荐阅读
- java - 是否可以通过标记从 Vaadin 的布局中获取组件?
- matrix - 矩阵变换 - “身份”仅适用于 x 轴
- php - 如何引用图像以将其上传到 CloudConvert
- c# - 在 Mac OS 上使用 VS2019 社区的 Entity Framework .Net Core 不起作用
- kubernetes - Kubernetes 与 Istio:使用外部 Oauth 服务进行身份验证
- c# - 如何从 C# 中的 ApplicationParameters 文件中获取参数值
- java - 突出显示 android 中文本到语音阅读器所说的单词的错误
- python-3.x - 在 Debian 错误中:“command 'gcc' failed with exit status 1”(pip install)
- python - Django模板不显示变量Correclty
- r - 闪亮的显示数字而不是日期