Python修剪字符串中的非标准段

Python修剪字符串中的非标准段,python,regex,list,bioinformatics,fasta,Python,Regex,List,Bioinformatics,Fasta,如何从一长串文本中删除标题 我有一个程序,可以将FASTA文件显示为 ...TCGATCATCGATCG>IonTorrenttrimmedcontig1$CCGTAGGTGAACCTGCGGAAG... 该字符串很大,包含多个如下所示的标题 因此,需要修剪的标题以>开头,以>结尾$ 有多个标题,从IonTorrenttrimmedcontig1到IonTorrenttrimmedcontig25 如何在>和$上剪切,删除中间的所有内容,并将前后的代码分离为单独的列表元素 该文件是从标准

如何从一长串文本中删除标题

我有一个程序,可以将FASTA文件显示为

...TCGATCATCGATCG>IonTorrenttrimmedcontig1$CCGTAGGTGAACCTGCGGAAG...

该字符串很大,包含多个如下所示的标题

因此,需要修剪的标题以>开头,以>结尾$ 有多个标题,从IonTorrenttrimmedcontig1到IonTorrenttrimmedcontig25

如何在>和$上剪切,删除中间的所有内容,并将前后的代码分离为单独的列表元素


该文件是从标准FASTA文件读取的,因此我很高兴听到关于输入步骤的可能解决方案。

我将使用
re
模块:

>>> s = "blablabla>ion1$foobar>ion2$etc>ion3$..."
>>> import re
>>> re.split(">[^$]*\$",s)
['blablabla', 'foobar', 'etc', '...']
如果每行有一个字符串:

>>> with open("foo.txt", "r") as f:
...   for line in f:
...     re.split(">[^$]*\$",line[:-1])
... 
['blablabla', 'foobar', 'etc', '...']
['fofofofofo', 'barbarbar', 'blablabla']

如果你正在阅读每一行,有几种方法可以做到这一点。您可以使用partition(partition返回一个包含3个元素的列表:[指定字符串之前的文本、指定字符串和之后的文本]:

您可以使用拆分:

for line in file:
    stripped_header = line.spilt(">")[1].split("$")[0]
您可以循环字符串中的所有元素,并仅在传递“>”之后、但在“$”之前追加(但是这将几乎没有效率):


或者使用正则表达式,但似乎我的同龄人已经击败了我

因为它是fasta文件的一部分,所以您要像这样对它进行切片:

>>> import re
>>> a = "TCGATCATCGATCG>IonTorrenttrimmedcontig1$CCGTAGGTGAACCTGCGGAAG"
>>> re.split(">[^$]*\$", a)
['TCGATCATCGATCG', 'CCGTAGGTGAACCTGCGGAAG']
另外,有些人用“ion1”来回答这个问题。那完全错了


我相信你的问题已经解决了!我还为这个问题编辑了一个生物信息学标签

如果您不知道什么是fasta文件,并且您的示例是一个包含
>ion1
(因为我不想复制/粘贴)的字符串,那么这并不是完全错误的。顺便说一句,我使用的regexp是io[^$]*\$”,那为什么不可以呢?(假设用户3264274可以做一些工作并将i大写以匹配他的示例?这太具体了,只适用于这种情况!甚至为什么提问者会将i大写?制作一些健壮且适用于任何情况的东西。顺便说一句,我了解fasta文件并与之合作了近10年:)干杯!“字符串很大,包含多个标题,如下所示”我不使用fasta文件,所以我不知道其结构。但我认为提问者可以做一些工作。我不想给一个人一条鱼……虽然从这个问题上看,很明显是从
$
中,你是对的,所以我编辑了我的答案;]非常感谢你的帮助。看来我有一些家庭作业要做。正如所描述的那样工作,并为我提供了一个很好的例子,我现在明白了如何解决这样的问题。我还为自己输入了一个名字,以此表示/保证参与这个社区!没问题,罗本!欢迎来到Stackoverflow,这里是我们学习和成长的地方:)如果答案有帮助,请接受并投票!干杯:)
for line in file:
    bool = False
    stripped_header = ""
    for char in line:
        if char == ">":
            bool = True
        elif bool:
            if char != "$":
                stripped_header += char
            else:
                bool = False
>>> import re
>>> a = "TCGATCATCGATCG>IonTorrenttrimmedcontig1$CCGTAGGTGAACCTGCGGAAG"
>>> re.split(">[^$]*\$", a)
['TCGATCATCGATCG', 'CCGTAGGTGAACCTGCGGAAG']