🐸

标签猎人

数据与文本工具python-data-tinkerer-31-the-tag-hunter
奖励: 160 XP
|

标签猎人

Hoppy 在侦查墙前停下脚步,看到一张被风吹皱的混合便签:句子、提醒、方向全都挤在一起,只有几处短短的小标签被方括号夹了出来。

这正是文本侦探常遇到的场景:正文很乱,但信号并没有消失。只要你能看出标签从哪里开始、到哪里结束,就能先把这些短线索揪出来。

标签不是 parser,它只是被边界夹住的信号

有些混合文本并不需要复杂解析。只要标签是扁平的,而且边界很明显,比如被 [] 包起来,你就可以先沿着这些边界下手。

sample_note = "bench note [amber] ivy path [quiet]"
parts = sample_note.split("[")
first_tag = parts[1].split("]")[0]
second_tag = parts[2].split("]")[0]
print(first_tag)
print(second_tag)

这个示例只是演示“看到边界,就先把标签拿出来”的动作,不是今天 starter 的原题答案。真正的任务里,你会在另一张混合便签里做同样的事,并把结果整理起来。

今天的任务:从混合便签里揪出三个标签

starter 已经给你一张 mixed_note,并先帮你做了 tag_pieces = mixed_note.split("[")。你要继续根据 [] 的边界,提取 first_tagsecond_taglast_tag,再把它们整理成 found_tagstag_counttag_report

1
先看清标签边界在哪里

运行 starter,观察 mixed_notetag_pieces。注意:普通文字会留在前面的片段里,真正被方括号包住的标签内容,藏在后面的几个片段开头。

2
从第一个标签片段里拿到 first_tag

tag_pieces[1] 先看第一个标签片段,再用 split("]") 把右边界切开。这样你就能拿到方括号里面的内容。

3
把同样动作重复到后面的标签片段

对第二个和最后一个标签片段重复同样的边界拆法,得到 second_taglast_tag,再把三个标签排成 found_tags

4
把提取结果组织成 tag_report

最后别把标签散着放。用 tag_count 和几个标签值构造一个 tag_report 字典,让混合文本里的信号变成更清楚的结构。

这节课只处理简单边界标签

我们今天不进入 HTML / XML,不讨论嵌套标签,也不讲正则。重点只是:当文本里有平面的边界信号时,你可以先把短标签提取出来。

参考答案
点击展开
参考答案:
mixed_note = "Scout wall: lantern low [glow] bridge cracked [repair] route hidden [west]"

print("Mixed note:", mixed_note)

tag_pieces = mixed_note.split("[")
print("Tag pieces:", tag_pieces)

first_tag = tag_pieces[1].split("]")[0]
second_tag = tag_pieces[2].split("]")[0]
last_tag = tag_pieces[3].split("]")[0]
found_tags = [first_tag, second_tag, last_tag]
tag_count = len(found_tags)

tag_report = {
  "first_tag": first_tag,
  "second_tag": second_tag,
  "last_tag": last_tag,
  "found_tags": found_tags,
  "tag_count": tag_count,
}

print("First tag:", first_tag)
print("Second tag:", second_tag)
print("Last tag:", last_tag)
print("Found tags:", found_tags)
print("Tag count:", tag_count)
print("Tag report:", tag_report)
高级技巧
想更进一步?点击展开

这节课真正要建立的,不是“方括号语法”,而是一个更重要的直觉:混合文本里常常藏着结构信号,而这些信号往往有清楚的边界。

下一课你会继续做文本侦探,但这次重点不是提取标签,而是判断 split / replace / search 各自更适合处理什么问题。

Loading...
终端输出
Terminal
Ready to run...