删除python中变量的特定部分

删除python中变量的特定部分,python,Python,我正在寻找python代码,以便转换: scaffold_356_1-1000_+__Genus_species 进入 因此,我们的想法是首先在名称的uuuu部分后面减少3个首字母,从属u物种到根u spe 并从中删除数字部分,以便删除_1-1000_+_ 感谢您的帮助: 我实际上知道该怎么做: import re name = "scaffold_356_1-1000_+__Genus_species" name=re.sub(r'\d+\-\d*',"",name) name = re

我正在寻找python代码,以便转换:

scaffold_356_1-1000_+__Genus_species 
进入

因此,我们的想法是首先在名称的uuuu部分后面减少3个首字母,从属u物种到根u spe

并从中删除数字部分,以便删除_1-1000_+_

感谢您的帮助:

我实际上知道该怎么做:

import re 
name = "scaffold_356_1-1000_+__Genus_species"
name=re.sub(r'\d+\-\d*',"",name)
name = re.sub(r'__.__',"_",name)
我得到:

scaffold_356_Genus_species

你就快到了。我会将字符串拆分为前缀和后缀,分别修改它们,然后将它们重新连接起来

import re
s = 'scaffold_356_1-1000_+__Genus_species'

#Split to suffix and prefix
suffix, prefix = s.split('__')
#scaffold_356_1-1000_+, Genus_species

#Get first three characters for prefix
modified_prefix = '_'.join([s[0:3] for s in prefix.split('_')])
#Gen_spe

#Do the regex replace for digits and remove the underscore and + at end of string
modified_suffix =re.sub(r'\d+\-\d*',"",suffix).rstrip('_+\\+')
#scaffold_356

#Join the strings back
final_s = modified_suffix  + '_' + modified_prefix
print(final_s)
#scaffold_356_Gen_spe

你就快到了。我会将字符串拆分为前缀和后缀,分别修改它们,然后将它们重新连接起来

import re
s = 'scaffold_356_1-1000_+__Genus_species'

#Split to suffix and prefix
suffix, prefix = s.split('__')
#scaffold_356_1-1000_+, Genus_species

#Get first three characters for prefix
modified_prefix = '_'.join([s[0:3] for s in prefix.split('_')])
#Gen_spe

#Do the regex replace for digits and remove the underscore and + at end of string
modified_suffix =re.sub(r'\d+\-\d*',"",suffix).rstrip('_+\\+')
#scaffold_356

#Join the strings back
final_s = modified_suffix  + '_' + modified_prefix
print(final_s)
#scaffold_356_Gen_spe

这是我的解决方案,它对您输入的模式非常敏感:

name = "scaffold_356_1-1000_+__Genus_species"
comp_list = name.split("_")
result = comp_list[0] + "_" + comp_list[1] + "_" + comp_list[5][0:3] + "_" + comp_list[6][0:3]
print(result) # scaffold_356_Gen_spe

此解决方案的最大优点是可读性。这是我的解决方案,它对您输入的模式非常敏感:

name = "scaffold_356_1-1000_+__Genus_species"
comp_list = name.split("_")
result = comp_list[0] + "_" + comp_list[1] + "_" + comp_list[5][0:3] + "_" + comp_list[6][0:3]
print(result) # scaffold_356_Gen_spe

这个解决方案的最大优点是它的可读性。

看起来您正在尝试进行模式文本操作,正则表达式非常适合这种操作。很难从一个例子中概括—描述转换越精确,就越容易创建一个正则表达式来实现您想要的功能。关于正则表达式的Python文档是一个有用的参考:

如果我必须从您的示例和描述中概括出一种模式,我将创建以下正则表达式:

进口稀土 myre=re.compile r'[A-Za-z]+[\d]+'这将与第一组中的scaffold_356匹配 r''.[\d]+-[\d]+\+\\+\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ r''[A-Za-z]{3}'这将匹配Gen并将其放入第二组 r'[A-Za-z]*'这将匹配任何未分组的附加字母 r''[A-Za-z]{3}'这将匹配Gen并将其放入第三组 如果随后尝试使用此正则表达式,您可以看到它会将要构造的部分提取到最终结果中:

匹配=myre.匹配“脚手架”\u 356\u 1-1000\u+\u属\u种” print.joinmatches打印脚手架\u 356\u Gen\u spe
当然,这个正则表达式只适用于非常特定的模式,如果没有严格遵守该模式,它将是不可原谅的。

看起来您正在尝试进行模式文本操作,正则表达式非常适合这种操作。很难从一个例子中概括—描述转换越精确,就越容易创建一个正则表达式来实现您想要的功能。关于正则表达式的Python文档是一个有用的参考:

如果我必须从您的示例和描述中概括出一种模式,我将创建以下正则表达式:

进口稀土 myre=re.compile r'[A-Za-z]+[\d]+'这将与第一组中的scaffold_356匹配 r''.[\d]+-[\d]+\+\\+\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ r''[A-Za-z]{3}'这将匹配Gen并将其放入第二组 r'[A-Za-z]*'这将匹配任何未分组的附加字母 r''[A-Za-z]{3}'这将匹配Gen并将其放入第三组 如果随后尝试使用此正则表达式,您可以看到它会将要构造的部分提取到最终结果中:

匹配=myre.匹配“脚手架”\u 356\u 1-1000\u+\u属\u种” print.joinmatches打印脚手架\u 356\u Gen\u spe
当然,这个正则表达式只适用于非常特定的模式,如果不严格遵守该模式,它将是不可原谅的。

可能不是最优雅的解决方案,但它的工作原理是假设您始终具有string\u 3digits\u 1digit-4digits\u+\u string\u string的模式

import re

a_string = 'scaffold_356_1-1000_+__Genus_species'

new = re.findall('^([a-zA-Z]+_[0-9][0-9][0-9]_).+?_\+__([a-zA-Z][a-zA-Z][a-zA-Z]).*(_[a-zA-Z][a-zA-Z][a-zA-Z]).*', a_string)

print(''.join(list(new[0])))
# scaffold_356_Gen_spe

本例使用带有捕获组的正则表达式模式。您可能想稍微了解一下模式的结构。如果插入此正则表达式模式,regex101将为您提供对每一项的可理解解释。

可能不是最优雅的解决方案,但如果您始终使用字符串\u 3digits\u 1digit-4digits\u+\u string\u string的模式,则它会起作用

import re

a_string = 'scaffold_356_1-1000_+__Genus_species'

new = re.findall('^([a-zA-Z]+_[0-9][0-9][0-9]_).+?_\+__([a-zA-Z][a-zA-Z][a-zA-Z]).*(_[a-zA-Z][a-zA-Z][a-zA-Z]).*', a_string)

print(''.join(list(new[0])))
# scaffold_356_Gen_spe

本例使用带有捕获组的正则表达式模式。您可能想稍微了解一下模式的结构。如果插入此正则表达式模式,regex101将为您提供每一项的易懂解释。

显示您的代码和完整的错误消息。什么是scaffold_356_1-1000_+_属_种?它是一根绳子吗?你想做一些字符串转换吗?我们说的是字符串吗?你可能想开始工作。我展示了我所做的尝试,我被困在将属种简化为属种的过程中。请检查我下面关于如何将属种简化为属种的答案@chippycentrashow你的代码和完整的错误消息。什么是scaffold_356_1-1000_+_属种?它是一根绳子吗?你想做一些字符串转换吗?我们说的是字符串吗?你可能想开始工作。我展示了我所做的尝试,我被困在为了将属种减少到属种来检查我的答案 下面介绍如何将属物种减少为Gen_spe@chippycentra