我有一个这样的清单:
Tomato4439,> gi | 224089052 | ref | XP_002308615.1 |预测蛋白[Populus trichocarpa]
我想使用python删除不需要的字符,所以列表看起来像: 番茄 毛果杨(Populus trichocarpa)
我可以为第一个做以下事情:
name = ">Tomato4439"
name = name.strip(">1234567890")
print name
Tomato
但是,我不知道如何处理第二个问题。任何建议都将不胜感激。
答案 0 :(得分:3)
下式给出:
s='Tomato4439, >gi|224089052|ref|XP_002308615.1| predicted protein [Populus trichocarpa]'
这样:
s = s.split()
[s[0].strip('0123456789,'), s[-2].replace('[',''), s[-1].replace(']','')]
会给你
['Tomato', 'Populus', 'trichocarpa']
如果您要经常这样做,可能值得调查正则表达式,并且“规则”可能不那么静态,因为正则表达式在这种情况下更灵活地处理数据。对于您提供的示例问题,这将有效。
答案 1 :(得分:1)
>>> import re
>>> line = "Tomato4439, >gi|224089052|ref|XP_002308615.1| predicted protein [Populus trichocarpa]"
>>> match = re.match("^([a-zA-Z]+).*\[([a-zA-Z ]+)\].*",line)
>>> match.groups()
('Tomato', 'Populus trichocarpa')
编辑为不在第二部分中包含[]
...这应该适用于任何与您的查询模式匹配的事物(例如,以名称开头,以[]中的某些内容结尾)它也会匹配
例如"Tomato4439, >gi|224089052|ref|XP_002308615.1| predicted protein [Populus trichocarpa apples]"
答案 2 :(得分:1)
import re
a = "Tomato4439, >gi|224089052|ref|XP_002308615.1| predicted protein [Populus trichocarpa]"
re.sub(r"^([A-Za-z]+).+\[([^]]+)\]$", r"\1 \2", a)
这给出了
'Tomato Populus trichocarpa'
答案 3 :(得分:1)
如果您尝试解析的字符串在语义上是一致的,那么您最好的选择可能是对您拥有的字符串的不同“类型”进行分类,然后使用python的re
模块创建正则表达式来解析它们。
答案 4 :(得分:1)
以前的答案比我的简单,但是:
这是打印您不想要的东西的一种方法。
tag = "Tomato4439, >gi|224089052|ref|XP_002308615.1| predicted protein [Populus trichocarpa]"
import re, os
find = re.search('>(.+?) \[', tag).group(1)
print find
给你
gi|224089052|ref|XP_002308615.1| predicted protein
然后你可以使用replace函数从原始字符串中删除它。而翻译功能可以删除多余的不需要的字符。
tag2 = tag.replace(find, "")
tag3 = str.translate(tag2, None, ">[],")
print tag3
给你
Tomato4439 Populus trichocarpa