为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用正则表达式从列表中仅获取字符串的选定部分?

如何使用正则表达式从列表中仅获取字符串的选定部分?

心有法竹 2023-04-25 15:40:51
我有来自 blast 文件的一行,其中包含对齐分数:Score =  344 bits (186), Expect = 5e-91我正在尝试在 python 脚本中使用正则表达式(我知道 biopython 会让我的生活更简单,但我不允许使用它)来仅提取“344”值。在文件中我有很多分数,所以我不能只在我的正则表达式中使用字符串“344”来提取值。现在,我的代码是:score_list = []for record in blast_file:    score = re.search(r'Score = (.+\d)', record).group(1)    score_list.append(score)    print(score_list)话虽如此,我得到的输出是:344 bits (186), Expect = 5e-91如何编辑正则表达式,以便只获得“344”或“位”之前的任何值?
查看完整描述

3 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

如果 score_list 中的所有值都采用以下格式:


344 位 (186),预期 = 5e-91


这个答案不是最漂亮的,但它也将值转换为整数,因为您可能想用它作为生物信息学数据进行分析。


import re


# This is your code


score_list = []

for record in blast_file:

    score = re.search(r'Score = (.+\d)', record).group(1)

    score_list.append(score)

    print(score_list)



# This will extract the bit score


new_list = []

for i in score_list:

    new_list.append(re.findall(r'^\d*', i))

new_list = [i for val in new_list for i in val]

new_list = list(map(int, new_list))

new_list


^\d* 将匹配任意数量的数字,直到“位”之前的空格。然后接下来的两行将列表的列表展平并将所有数字从字符串转换为整数。


查看完整回答
反对 回复 2023-04-25
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

下面是你可以获得任何字符串的方法,只需像我一样插入正则表达式。


    def new():

        string="Score =  344 bits (186), Expect = 5e-91"

        n=re.search("=  (.*?)\ bits",string)

        m=n.group(1)

        return str(m)


查看完整回答
反对 回复 2023-04-25
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

使用当前的正则表达式,您将匹配所有字符直到最后一位,然后包括最后一位。

如果您只想匹配数字,请从 更改Score = (.+\d)Score = (\d+)

另外,请注意等式符号后有双空格。如果你想忽略间距,这将是你的正则表达式:Score\s*=\s*(.+\d)


查看完整回答
反对 回复 2023-04-25
  • 3 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信