如何在数组列表中搜索字符串(python正则表达式)
我想从下面的列表“seg”中检索DP的值如何在数组列表中搜索字符串(python正则表达式),python,regex,string,list,pattern-matching,Python,Regex,String,List,Pattern Matching,我想从下面的列表“seg”中检索DP的值 import re seg = ['AC=2', 'AF=1.00', 'AN=2', 'DB', 'DP=6', 'FS=0.000', 'MLEAC=2', 'MLEAF=1.00', 'MQ=31.55', 'MQ0=0', 'QD=31.64'] for i in seg: name = re.compile(r'DP=(.*)') mo = name.search(i) if mo:
import re
seg = ['AC=2', 'AF=1.00', 'AN=2', 'DB', 'DP=6', 'FS=0.000',
'MLEAC=2', 'MLEAF=1.00', 'MQ=31.55', 'MQ0=0', 'QD=31.64']
for i in seg:
name = re.compile(r'DP=(.*)')
mo = name.search(i)
if mo:
print "True",mo
else:
print "no"
这给了我如下输出:
no
no
no
no
True <_sre.SRE_Match object at 0x00000000025DDCD8>
no
no
no
no
no
no
否
不
不
不
真的
不
不
不
不
不
不
找到匹配项,但为什么不给我DP值?
请帮助我,我是新来的regex
mo
是一个对象。要获取DP值,请使用mo.group(1)
获取捕获组。这将返回6
,您可以使用int
不使用regex的解决方案来解析它
for i in seg:
if "DP=" in i:
x, dp = i.split("=")
print dp # You can see we captured the 6
dp
将包含您要查找的值。如果您想保留它,可以将其附加到列表中
如果您想继续使用regex,您应该使用(正如另一位评论员所说)
.group(0)
。您可以查看讨论了解更多信息。mo.group(0)将返回字符串“DP=6”,因此,如果目标是使用DP的值,它是否缺少某些内容。我们可以添加这个函数(在这里[)来检索float(或int,请参阅链接)DP=mo.group(0)def get_num(x):返回float(''.join(如果ele.isdigit()或ele=='.'))DP=getnum(DP)
这将返回DP值的6.0
。但它的效率低于@nbryans的回答。啊,对不起。mo.group(1)
将返回6。无需查找整数:)我只是编辑了答案以反映这一点。捕捉得很好!你好,布莱恩,谢谢你的回答。实际上我尝试了这个方法,它只是给出了一个错误,我还在学习阶段。你能告诉我x在你的代码中的意义吗?嗨,安吉,在x,dp=I.split(=)行中
,我们将使用=
作为分隔符拆分字符串i
(例如,“DP=6”)。这将生成一个列表,即[“DP”,“6”]
通过使用x,DP
,我们将获得该列表的第一个条目(“DP”)分配给x
,列表的其余部分分配给dp
。由于列表只有两个条目长,dp
被分配为“6”。您收到的具体错误是什么?