用python中的变量值替换特定格式的字符
我有特定格式的文件名用python中的变量值替换特定格式的字符,python,string,replace,Python,String,Replace,我有特定格式的文件名 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部分,该部分的值位于名称中的字符串变量中 名称=['T'、'D'、'FG'…] 预期产量 II.NIL.10.BHT.2058.190.160877 II.NIL.10.BHD.2008.190.168857 II.NIL.10.BHFG.
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部分,该部分的值位于名称中的字符串变量中
名称=['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是否可能?您可以使用内置的regex模块re以及以下模式来有效地替换字符串中的内容 图案 输出 处理多个文件 要对多个文件重复此过程,您可以在循环/理解中应用上述逻辑,在每个原始/替换配对上运行re.sub函数,并适当地存储/处理 下面的示例使用原始问题中的数据以及上述逻辑,通过原始文件名和使用re.sub插入的子字符串之间的字典映射,创建包含每个re.sub操作结果的列表 进口稀土 原件=[ “II.无10.BHZ.M.2058.190.160877”, “II.无10.BHA.M.2008.190.168857”, “II.无10.BHB.M.2078.198.160857” ] 替换项=['T'、'D'、'FG'] mapping={originals[i]:i的替换[i],u在}
results=[re.subr'?您可以使用内置的regex模块re以及以下模式来有效地替换字符串中的内容 图案 输出 处理多个文件 要对多个文件重复此过程,您可以在循环/理解中应用上述逻辑,在每个原始/替换配对上运行re.sub函数,并适当地存储/处理 下面的示例使用原始问题中的数据以及上述逻辑,通过原始文件名和使用re.sub插入的子字符串之间的字典映射,创建包含每个re.sub操作结果的列表 进口稀土 原件=[ “II.无10.BHZ.M.2058.190.160877”, “II.无10.BHA.M.2008.190.168857”, “II.无10.BHB.M.2078.198.160857” ] 替换项=['T'、'D'、'FG'] mapping={originals[i]:i的替换[i],u在} results=[re.subr'?不,不能使用通配符替换str.replace 进口稀土 文件名=['II.NIL.10.BHA.M.2008.190.168857','II.NIL.10.BHB.M.2078.198.160857', “II.无10.BHC.M.2078.198.160857”] 名称=['T'、'D'、'FG'] 新文件名=[] 对于RangeLenFileName中的i: newfilenames.appender.subr'BH.?\.M','BH'+名称[i],文件名[i] 打印“”。joinnewfilenames输出II.NIL.10.BHT.2008.190.168857 II.NIL.10.BHD.2078.198.160857 II.NIL.10.BHFG.2078.198.160857 不,您不能使用str.replace作为通配符。您必须将regex与以下内容一起使用 进口稀土 文件名=['II.NIL.10.BHA.M.2008.190.168857','II.NIL.10.BHB.M.2078.198.160857', “II.无10.BHC.M.2078.198.160857”] 名称=['T'、'D'、'FG'] 新文件名=[] 对于RangeLenFileName中的i: newfilenames.appender.subr'BH.?\.M','BH'+名称[i],文件名[i] 打印“”。joinnewfilenames输出II.NIL.10.BHT.2008.190.168857 II.NIL.10.BHD.2078.198.160857 II.NIL.10.BHFG.2078.198.160857 您可以在替换re.sub的lambda中使用iter和next: 您可以在替换re.sub的lambda中使用iter和next: str.replace不适用于通配符。您可以改用。str.replace不适用于通配符。您可以改用。
'(?<=BH)[A-Z]+\.M'
II.NIL.10.BHFG.2078.198.160857
II.NIL.10.BHT.2058.190.160877
II.NIL.10.BHD.2008.190.168857
II.NIL.10.BHFG.2078.198.160857
import re
name = iter(['T','D','FG'])
s = """
II.NIL.10.BHZ.M.2058.190.160877
II.NIL.10.BHA.M.2008.190.168857
II.NIL.10.BHB.M.2078.198.160857
"""
result = re.sub('(?<=BH)\w\.\w', lambda x:f'{next(name)}', s)
II.NIL.10.BHT.2058.190.160877
II.NIL.10.BHD.2008.190.168857
II.NIL.10.BHFG.2078.198.160857