Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python中的变量值替换特定格式的字符_Python_String_Replace - Fatal编程技术网

用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