如何从一行中提取几个带标记的字符串(python)
我的朋友们 我花了很长时间在这件事上。。。但目前还无法找到更好的方法。顺便说一下,我正在用python编写代码 下面是我正在处理的文件中的一行文本,例如: “>参考文献| ZP_01631227.1 | 3-脱氢喹啉酸合酶[球瘤菌CCY9414]…” 如何从该行中提取两个字符串“ZP_01631227.1”和“结节藻CCY9414” “| |”和括号的对像是标记,所以我们知道我们想要把字符串放在两个之间 我想我可能可以把这行中的所有角色都循环一遍,然后用最艰难的方式来完成。只是花了太多时间。。。想知道是否有一个python库或其他聪明的方法可以很好地完成它如何从一行中提取几个带标记的字符串(python),python,string,extract,line,Python,String,Extract,Line,我的朋友们 我花了很长时间在这件事上。。。但目前还无法找到更好的方法。顺便说一下,我正在用python编写代码 下面是我正在处理的文件中的一行文本,例如: “>参考文献| ZP_01631227.1 | 3-脱氢喹啉酸合酶[球瘤菌CCY9414]…” 如何从该行中提取两个字符串“ZP_01631227.1”和“结节藻CCY9414” “| |”和括号的对像是标记,所以我们知道我们想要把字符串放在两个之间 我想我可能可以把这行中的所有角色都循环一遍,然后用最艰难的方式来完成。只是花了太多时间。。。
谢谢大家 一种简洁的替代方法是正则表达式(出于某种原因,它们在Python社区中的代表性很差,但它们确实为简单的文本处理提供了简洁和强大的功能):
>>> for line in open("file"):
... if "|" in line:
... whatiwant_1=line.split("|")[1]
... if "[" in line:
... whatiwant_2=line.split("[")[1].split("]")[0]
...
>>> print whatiwant_1 , whatiwant_2
ZP_01631227.1 Nodularia spumigena CCY9414
一种简洁的替代方法是正则表达式(出于某种原因,它们在Python社区中的代表性很差,但它们确实为简单的文本处理提供了简洁性和强大的功能):
你的意思是说
mo=re.search(r'\\(.*?)\\.[(.*?)\]',s)
?至于regexp在Python社区名声不好的原因,我认为与Perl文档(perlRequest)相比,该文档有点吓人。例如,在当前的re
文档的开头可以添加一个包含示例的温和教程。@gnibbler,是的,我已经删除了s
,tx用于查找、编辑以修复。你是说mo=re.search(r'\\\(.*)\\.[(.?\]),s吗
?关于regexp在Python社区名声不好的原因,我认为与Perl文档(perlrequick)相比,该文档有点吓人。例如,在当前的re
文档的开头可以添加一个包含示例的温和教程。@gnibbler,是的,我已经删除了s
,tx用于查找、编辑和修复。这正是我需要的解决方案!非常感谢!这正是我需要的解决方案!非常感谢!
import re
s = ">ref|ZP_01631227.1| 3-dehydroquinate synthase [Nodularia spumigena CCY9414]..."
mo = re.search(r'\|(.*?)\|/*\[(.*?)\]', s)
if mo:
thefirst, thesecond = mo.groups()