1

次のようなリストがあります。

トマト4439、>gi|224089052|ref|XP_002308615.1| 予測タンパク質 [Populus trichocarpa]

リストが次のようになるように、Python を使用して不要な文字を削除したい: Tomato Populus trichocarpa

最初のものに対して次のことができます。

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

ただし、2番目のものをどうするかはわかりません。任意の提案をいただければ幸いです。

4

5 に答える 5

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']

これを頻繁に行う場合は、正規表現を調査する価値があるかもしれません。その場合、正規表現はデータをより柔軟に処理するため、「ルール」はそれほど静的ではない可能性があります。ただし、提示したサンプルの問題については、これでうまくいきます。

于 2012-09-13T18:13:15.910 に答える
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')

2番目の部分を含めないように編集しまし[]た...これは、クエリのパターンに一致するもの(たとえば、名前で始まり、[]内の何かで終わる)に対して 機能するはず"Tomato4439, >gi|224089052|ref|XP_002308615.1| predicted protein [Populus trichocarpa apples]"です。

于 2012-09-13T18:06:55.927 に答える
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'
于 2012-09-13T18:07:11.440 に答える
1

解析しようとしている文字列が意味的に一貫している場合、最適なオプションは、使用している文字列のさまざまな「タイプ」を分類し、Python のreモジュールを使用してそれらを解析する正規表現を作成することです。

于 2012-09-13T18:07:16.723 に答える
1

以前の回答は私のものより単純でしたが、次のとおりです。

不要なものを印刷する 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
于 2012-09-13T18:19:58.590 に答える