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

我有来自 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”或“位”之前的任何值?


心有法竹
浏览 121回答 3
3回答

绝地无双

如果 score_list 中的所有值都采用以下格式:344 位 (186),预期 = 5e-91这个答案不是最漂亮的,但它也将值转换为整数,因为您可能想用它作为生物信息学数据进行分析。import re# This is your codescore_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 scorenew_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* 将匹配任意数量的数字,直到“位”之前的空格。然后接下来的两行将列表的列表展平并将所有数字从字符串转换为整数。

慕丝7291255

下面是你可以获得任何字符串的方法,只需像我一样插入正则表达式。    def new():        string="Score =  344 bits (186), Expect = 5e-91"        n=re.search("=  (.*?)\ bits",string)        m=n.group(1)        return str(m)

子衿沉夜

使用当前的正则表达式,您将匹配所有字符直到最后一位,然后包括最后一位。如果您只想匹配数字,请从 更改Score = (.+\d)为Score = (\d+)。另外,请注意等式符号后有双空格。如果你想忽略间距,这将是你的正则表达式:Score\s*=\s*(.+\d)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python