Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从一行中提取几个带标记的字符串(python)_Python_String_Extract_Line - Fatal编程技术网

如何从一行中提取几个带标记的字符串(python)

如何从一行中提取几个带标记的字符串(python),python,string,extract,line,Python,String,Extract,Line,我的朋友们 我花了很长时间在这件事上。。。但目前还无法找到更好的方法。顺便说一下,我正在用python编写代码 下面是我正在处理的文件中的一行文本,例如: “>参考文献| ZP_01631227.1 | 3-脱氢喹啉酸合酶[球瘤菌CCY9414]…” 如何从该行中提取两个字符串“ZP_01631227.1”和“结节藻CCY9414” “| |”和括号的对像是标记,所以我们知道我们想要把字符串放在两个之间 我想我可能可以把这行中的所有角色都循环一遍,然后用最艰难的方式来完成。只是花了太多时间。。。

我的朋友们

我花了很长时间在这件事上。。。但目前还无法找到更好的方法。顺便说一下,我正在用python编写代码

下面是我正在处理的文件中的一行文本,例如:

“>参考文献| ZP_01631227.1 | 3-脱氢喹啉酸合酶[球瘤菌CCY9414]…”

如何从该行中提取两个字符串“ZP_01631227.1”和“结节藻CCY9414”

“| |”和括号的对像是标记,所以我们知道我们想要把字符串放在两个之间

我想我可能可以把这行中的所有角色都循环一遍,然后用最艰难的方式来完成。只是花了太多时间。。。想知道是否有一个python库或其他聪明的方法可以很好地完成它


谢谢大家

一种简洁的替代方法是正则表达式(出于某种原因,它们在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()