在python中删除字符串的两侧

时间:2012-09-13 17:59:48

标签: python string strip

我有一个这样的清单:

  

Tomato4439,> gi | 224089052 | ref | XP_002308615.1 |预测蛋白[Populus trichocarpa]

我想使用python删除不需要的字符,所以列表看起来像: 番茄 毛果杨(Populus trichocarpa)

我可以为第一个做以下事情:

name = ">Tomato4439"
name = name.strip(">1234567890")
print name
Tomato

但是,我不知道如何处理第二个问题。任何建议都将不胜感激。

5 个答案:

答案 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