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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:57:31