从制表符分隔文本文件中提取合并后的一级项目点内容的技术咨询
从制表符分隔文本文件中提取合并后的一级项目点内容的技术咨询
我完全懂你的需求——就是要把每个一级标题和它下面所有的二级项目内容合并成完整的一行,而不是只提一级标题或者单独拉出每个二级条目对吧?之前用正则没搞定确实闹心,我给你两个实用的方案试试:
方案一:用Python脚本逐行处理(直观好调整)
这种方法逻辑很清晰,适合新手或者需要灵活调整格式的情况:
我们的思路是:遍历每一行,遇到一级项目就新建一个条目;遇到二级项目就把内容追加到当前的一级条目后面,最后把所有合并好的条目输出成你要的有序列表格式。
直接上代码(假设你的文本文件名叫bullets.txt):
merged_items = [] current_item = "" with open("bullets.txt", "r") as f: for line in f: line = line.strip() if not line: continue # 跳过空行 # 判断是否为一级项目:开头是"- ",且没有前置制表符缩进 if line.startswith("- ") and not line.startswith("\t- "): # 如果之前有未完成的条目,先加入列表 if current_item: merged_items.append(current_item) # 提取一级标题内容(去掉前面的"- ") current_item = line[2:] else: # 处理二级项目:去掉前面的"\t- ",追加到当前条目 if line.startswith("\t- "): current_item += " " + line[3:] # 把最后一个条目加入列表 if current_item: merged_items.append(current_item) # 输出成你需要的有序列表格式 print("<ol>") for idx, item in enumerate(merged_items, 1): print(f"<li>{item}</li>") print("</ol>")
如果你的文本里用的是空格缩进(比如4个空格)而不是制表符,只要把代码里的\t换成对应的空格串就行,比如 (四个空格)。
方案二:用正则表达式批量匹配(适合快速处理)
如果你更倾向用正则,也可以用多行匹配的方式,一次性捕获每个一级项目及其下属的所有二级内容:
import re with open("bullets.txt", "r") as f: text = f.read() # 正则匹配规则:捕获一级标题,以及后面所有缩进的二级项目内容 # 注意:如果是空格缩进,把\t换成对应空格数 pattern = r"- (.*?):\n(?:\t- (.*?)\.?\n?)+" matches = re.findall(pattern, text, re.MULTILINE) merged_items = [] for match in matches: title = f"{match[0]}:" # 把所有二级内容拼接起来 contents = " ".join([content.strip() for content in match[1:] if content.strip()]) merged_items.append(f"{title} {contents}") # 输出有序列表 print("<ol>") for idx, item in enumerate(merged_items, 1): print(f"<li>{item}</li>") print("</ol>")
这个正则会自动匹配每个一级标题下面的所有二级项目,然后把它们合并到同一行里,和你想要的效果完全一致。
备注:内容来源于stack exchange,提问作者Jiang Pingfei
相关产品推荐
相关产品推荐

