我的re.findall搜索正在匹配并返回正确的字符串,但是当我尝试打印结果时,它将其打印为列表而不是字符串。示例如下:
> line = ID=id5;Parent=rna1;Dbxref=GeneID:653635,Genbank:NR_024540.1,HGNC:38034;gbkey=misc_RNA;gene=WASH7P;product=WAS protein family homolog 7 pseudogene;transcript_id=NR_024540.1
> print re.findall(r'gene=[^;\n]+', line)
> ['gene=WASH7P']
我希望print函数只返回gene=WASH7P
,不带括号和圆括号。
如何调整代码,使其只打印匹配项,而不在其周围使用括号和圆括号?
谢谢你!
您得到的错误可能是因为您的regex没有返回findall函数的任何匹配项。请在尝试索引之前检查re.findall返回的对象的返回类型。在索引之前使用此代码,以便如果list为空,则不会引发索引器错误。
谢谢大家的帮助!
下面两个代码都成功地将输出打印为字符串。
然而,我继续在我的一个正则表达式上得到“列表索引超出范围”错误,即使当我刚刚使用re.findall()时结果正在打印。
我意识到这个看似不可能的结果是因为我在一个for循环中调用re.findall(),这个循环在文件的每一行上迭代。有些行有匹配项,但其他行没有匹配项,因此我收到了那些没有匹配项的行的“列表索引超出范围”错误。
下面的代码解决了此问题:
谢谢你!
它把它打印成一个列表,因为。。这是一张单子。
findall():
要只打印字符串,请使用
print(re.findall(r'Name=[^;]+', line)[0])
。这段代码假设您有一个匹配项。如果有0个匹配项,则会出现错误。如果你有更多,你将只打印第一个匹配。
要确保没有收到错误,请在使用
[0]
(或.group()
用于re.search()
)之前检查是否找到匹配项。或
print(s[0])
相关问题 更多 >
编程相关推荐