请注意,此模式的最后两个数字(例如FBXASC048)是数字的ascii码(0-9)
输入示例列表['FBXASC048009Car','FBXASC053002Toy','FBXASC050004Human'] 结果示例['1009Car','5002Toy','2004Human']
在输入列表中搜索这些模式的正确方法是什么
num_ascii = ['FBXASC048', 'FBXASC049', 'FBXASC050', 'FBXASC051', 'FBXASC052', 'FBXASC053', 'FBXASC054', 'FBXASC055', 'FBXASC056', 'FBXASC057']
然后将找到的模式替换为conv列表中的一项,但不是随机替换 因为模式列表中的每个元素只等于conv_列表中的一个元素
conv_list = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
这就是我们心中的解决方案: 它有两部分
第一部分-->;查找ascii模式[48、49、50、51、52、53、54、55、56、57] 然后用正确的十进制匹配(0-9)替换这些 因此,我们将得到一个新的输入列表,它将被称为input_modi_list,ascii替换为decimal 第二部分-->;另一个使用“FBXASC0”的替换函数使用固定模式进行替换的过程 新名单3
for x in input_modi_list:
y = x.replace('FBXASC0', '')
new_list3.append(new_string)
因此,新的清单3将具有上述两部分的组合结果
我不知道是否会有一个简单的解决方案或更好的可能使用正则表达式 还要注意的是,我不知道如何将项目列表中的ascii替换为十进制
我会这样做的
|
连接,生成正则表达式模式:我认为这应该起作用:
现在,应该有一些解释:
1-对象
pattern
是一个regular expression,它将匹配以“FBXASC”开头并以3位数字(0-9)结尾的字符串的任何部分。(\d
表示数字,{3,3}表示它应该至少出现3次,最多出现3次,即正好出现3次)。此外,围绕\d{3,3}的括号表示匹配的三位数字将被存储以供以后使用(在下一部分中解释)2.
decode
函数接收一个match object,使用.group(1)
提取第一个匹配的组(在我们的例子中是由\d{3,3}匹配的三位数字),然后使用int
函数将字符串解析为整数(例如,将'048'转换为48),最后使用chr
函数查找哪个字符具有该ASCII代码。(例如,chr(48)将返回“0”,chr(65)将返回“A”)3-最后一部分将
re.sub
函数应用于列表的所有元素,这些元素将用相应的ASCII字符替换您描述的模式(FBXASC048[3位])的每次出现您可以看到,此解决方案不仅限于您的特定示例。任何数字都可以使用,只要它具有由
chr
函数识别的相应ASCII字符但是,如果您确实想将其限制在48-57范围内,只需修改
decode
函数即可:相关问题 更多 >
编程相关推荐