Python 2.7正则表达式;寻找不同数量的表达式

Python 2.7正则表达式;寻找不同数量的表达式,python,arrays,regex,bioinformatics,Python,Arrays,Regex,Bioinformatics,我正在从事一个生物信息学项目,目前正在尝试拆分包含染色体位置的特定字符串。 几个字符串的示例,名称为“location”: 我希望返回的内容如下所示: ([154532082]) ([154532058], [154532060]) ([154532046]) 我想不出一个正则表达式通常只捕获第一个数字,如果存在,则单独捕获第二个数字,而不创建第二个组,如: re.findall(":g.(\d*)_?(\d*)", location) which gives: ([154532082]

我正在从事一个生物信息学项目,目前正在尝试拆分包含染色体位置的特定字符串。 几个字符串的示例,名称为“location”:

我希望返回的内容如下所示:

 ([154532082])
 ([154532058], [154532060])
 ([154532046])
我想不出一个正则表达式通常只捕获第一个数字,如果存在,则单独捕获第二个数字,而不创建第二个组,如:

re.findall(":g.(\d*)_?(\d*)", location)
which gives:
([154532082], [])
([154532058], [154532060])
([154532046], [])


有什么表达式可以解决这个问题吗?或者,我应该按照我的方式查看并尝试删除空列表吗?

以下是您可以做的:

[re.search("(?<=:g.)(\d*)_?(\d*)", item).group() for item in location.split("\n")]
这将迭代从位置字符串构建的列表,在该列表中,我将字符串拆分为所有换行符。现在for循环将在换行符之间迭代字符串的每个部分。这些部分现在都称为“项目”

re.search("(?<=:g.)(\d*)_?(\d*)", item).group()

re.search(“(?这正是regex with
re.findall
的工作方式,模式中的每个捕获组都会添加一个项。不过,您始终可以过滤掉不必要的空项。是的,这是不可能的。您必须过滤掉空元组。但在此之前,此格式是否有名称?可能有一个包需要读取正如@WiktorStribiżew所说的
re.findall
有效,您首先需要拆分位置字符串并在右侧部分使用它,如:
re.findall(“\d+”,location.split(:g.”[1])
用点拆分字符串
,然后获取最后一个片段并用
\u
拆分-完成很多工作循环。选择一个,再试一次,如果还有任何问题,请返回。
[re.search("(?<=:g.)(\d*)_?(\d*)", item).group() for item in location.split("\n")]
for item in location.split("\n")
re.search("(?<=:g.)(\d*)_?(\d*)", item).group()