如何从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
相关产品推荐
相关产品推荐

