You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何删除首个指定实例后的所有字符串字符?

哈哈周五下午脑子离线太懂这种感觉了!我帮你搞定这个字符串拆分转DataFrame的事儿~

解决思路:用正则精准匹配拆分字段

观察你给的示例字符串,结构其实很固定:登录号 + 物种/菌株信息 + 质粒名称 + 序列类型,用正则表达式就能精准把每个字段抠出来,然后直接转成DataFrame。

具体代码实现

先上完整可运行的代码,之后再拆解说细节:

import pandas as pd
import re

# 你的示例字符串列表
seq_strings = [
    "NC_002523_1 Serratia entomophila plasmid pADAP, complete sequence.",
    "NZ_CM003366_0 Pantoea ananatis strain CFH 7-1 plasmid CFH1-7plasmid2, whole genome shotgun sequence.",
    "NZ_CP014491_0 Escherichia coli strain G749 plasmid pG749_3, complete sequence."
]

# 定义正则匹配模式,对应四个要提取的字段
pattern = r'^(\w+_\d+_\d+) (.*?) plasmid (.*?), (.*?)\.?$'

# 提取所有字符串的匹配结果,转成DataFrame
df = pd.DataFrame(
    [re.match(pattern, s).groups() for s in seq_strings],
    columns=["登录号", "物种/菌株信息", "质粒名称", "序列类型"]
)

# 打印看看结果
print(df)

代码细节拆解

  • 正则模式为啥这么写?

    • ^(\w+_\d+_\d+):匹配开头的登录号(比如NC_002523_1),\w匹配字母/数字,\d匹配数字,下划线直接匹配,完美覆盖你给的登录号格式
    • (.*?):非贪婪匹配物种和菌株信息,直到遇到plasmid就停,这样不会把后面的质粒名也包含进来
    • (.*?):匹配质粒名称,直到遇到, 就停,刚好截到质粒名的结尾
    • (.*?)\.?$:匹配最后的序列描述,\.?是处理结尾可能有的句号,$确保匹配到字符串最后
  • DataFrame生成:用列表推导式遍历每个字符串,把每个匹配到的字段组转成列表,再指定列名,直接就得到结构化的表格啦!

运行效果

输出的DataFrame会是这样的结构化内容:

登录号                  物种/菌株信息       质粒名称                     序列类型
0  NC_002523_1       Serratia entomophila      pADAP            complete sequence
1  NZ_CM003366_0  Pantoea ananatis strain CFH 7-1  CFH1-7plasmid2  whole genome shotgun sequence
2  NZ_CP014491_0   Escherichia coli strain G749    pG749_3            complete sequence

要是你的实际字符串有一些小变体(比如个别没有strain关键词,或者序列描述格式不一样),可以微调正则模式来适配,不过看你给的示例,当前模式完全够用~

内容的提问来源于stack exchange,提问作者Joe Healey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:34:34