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

如何从Python字符串中提取指定格式的idAnimal片段?

需求说明

我有一个从文本文件读取的Python字符串datastring,格式示例如下:

datastring = """
Animals {
    idAnimal
    nameAnimal
    animalko5854hg[name="Jazz"]
    animal6ljkjh[name="Pinky"]
    animal595s422d1252g55[name="Steven"]
    animalko5854hg[name="David"]
}
"""

print(type(datastring))#->str

从字符串的第四行开始,会出现animalidAnimal[name="nameAnimal"]格式的内容,我需要写一个函数,接收这类字符串作为参数,返回首个符合该格式行里的idAnimal部分。

示例预期结果

  • 第一个示例预期输出:
ko5854hg
  • 第二个示例:
datastring = """
Animals {
    idAnimal
    nameAnimal
    animal456jlk165ut[name="Dalty"]
    animal6ljkj[name="Moon"]

}
"""

预期输出:

456jlk165ut
  • 第三个示例:
datastring = """
Animals {
    idAnimal
    nameAnimal
    animalk45lil69lhfr5942lk[name="Jazz"]
    animal6ljkjh[name="Pinky"]
    animal595s422d1252g55[name="Steven"]
    animalko5854hg[name="David"]
    animalko5854hg[name="Oty"]
    animalko5854hg[name="Dan"]
}
"""

预期输出:

k45lil69lhfr5942lk

我知道startswith和endswith函数,但它们只返回布尔值,不知道该怎么实现这个需求,恳请帮忙。

解决方案

用正则表达式是最直接的方式,因为目标内容有固定格式,正则能精准提取我们需要的id部分。

实现代码

import re

def get_first_animal_id(datastring):
    # 匹配固定格式,捕获animal和[name=之间的内容
    pattern = r'animal([^\[]+)\[name='
    # 查找第一个匹配项
    match_result = re.search(pattern, datastring)
    if match_result:
        return match_result.group(1)
    return None  # 没有找到匹配内容时返回None

代码说明

  • 正则表达式r'animal([^\[]+)\[name=':
    • animal:匹配固定前缀
    • ([^\[]+):这是捕获组,匹配所有不是[的字符(也就是我们要的id部分),+保证至少有一个字符
    • \[name=:匹配[name=这个固定后缀,确保我们找的是符合格式的行
  • re.search:在整个字符串里找第一个符合规则的内容,找到后通过match_result.group(1)取出捕获的id部分

测试验证

把上面的函数和示例字符串结合测试,就能得到预期结果:

# 测试第一个示例
datastring1 = """
Animals {
    idAnimal
    nameAnimal
    animalko5854hg[name="Jazz"]
    animal6ljkjh[name="Pinky"]
    animal595s422d1252g55[name="Steven"]
    animalko5854hg[name="David"]
}
"""
print(get_first_animal_id(datastring1))  # 输出: ko5854hg

# 测试第二个示例
datastring2 = """
Animals {
    idAnimal
    nameAnimal
    animal456jlk165ut[name="Dalty"]
    animal6ljkj[name="Moon"]

}
"""
print(get_first_animal_id(datastring2))  # 输出: 456jlk165ut

# 测试第三个示例
datastring3 = """
Animals {
    idAnimal
    nameAnimal
    animalk45lil69lhfr5942lk[name="Jazz"]
    animal6ljkjh[name="Pinky"]
    animal595s422d1252g55[name="Steven"]
    animalko5854hg[name="David"]
    animalko5854hg[name="Oty"]
    animalko5854hg[name="Dan"]
}
"""
print(get_first_animal_id(datastring3))  # 输出: k45lil69lhfr5942lk

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:55:18