Python如何提取文本中~[~与~]~特殊括号包裹的子字符串块
实现方案
最简洁高效的方式是直接用正则表达式做匹配提取,不需要手动split后逐段处理,能自动跳过无关内容、过滤不成对的标记。
完整可运行代码
import re # 用上下文管理器读取文件,自动处理文件关闭,避免资源泄漏 with open("myFile.txt", "r", encoding="utf-8") as f: file_content = f.read() # 编写匹配规则:匹配~[~ 和 ~]~ 包裹的内容,非贪婪模式避免跨段匹配 match_pattern = r"~\[~(.*?)~\]~" output = re.findall(match_pattern, file_content) print(output)
运行上述代码会直接得到目标结果:['some Words', 'Another Words']
规则说明
- 正则中
[属于特殊元字符,需要加\转义才能匹配字面意义的左方括号 (.*?)是非贪婪匹配分组,会匹配两个标记之间最短的内容,自动排除跨多个标记的错误匹配re.findall会自动提取所有符合规则的分组内容,直接返回列表,自动过滤掉所有不在标记对里的无关文本,比如示例里的hideMe、don't Show me、普通方括号包裹的what about me?都会被自动忽略
如果你坚持要用split的思路实现(不推荐,需要手动处理更多边界情况),可以参考如下写法:
with open("myFile.txt", "r", encoding="utf-8") as f: file_content = f.read() output = [] # 按起始标记切分 segments = file_content.split("~[~") # 切分后的第一段是起始标记之前的内容,直接跳过 for seg in segments[1:]: # 查找当前片段里第一个结束标记的位置 end_idx = seg.find("~]~") # 存在结束标记说明是成对的有效内容,截取标记前的部分 if end_idx != -1: output.append(seg[:end_idx]) print(output)
注意你初始代码存在基础错误:open()返回的是文件对象,不是字符串,不能直接调用split()方法,必须先调用read()读取文件的文本内容才能做字符串处理。
内容的提问来源于stack exchange,提问作者ryden
相关产品推荐
相关产品推荐

