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

获取BEGIN与----间括号内文本的正则表达式需求

解决方案

要提取关键词BEGIN与----之间的所有括号内文本,可以通过以下两种方式实现:

方法1:分两步锁定范围再提取内容

  1. 先匹配出BEGIN到----之间的全部内容:

    (?s)(?<=BEGIN).*?(?=----)
    
    • (?s):开启单行模式,让.能匹配换行符,支持跨多行匹配
    • (?<=BEGIN):确保匹配起点在BEGIN之后
    • .*?(?=----):非贪婪匹配到----之前的所有内容,避免过度匹配
  2. 在上述匹配到的内容里,全局提取所有括号内的文本:

    \((.*?)\)
    

    捕获组1就是目标文本,最后可自行去除文本前后的多余空白字符。

方法2:一次性全局匹配

如果正则引擎支持正向断言和全局匹配,可直接用这个正则完成提取:

(?s)(?<=BEGIN)(?:(?!----).)*?\((.*?)\)(?=(?:(?!----).)*----)

这个正则会直接捕获所有位于BEGIN之后、----之前的括号内文本,对捕获组1的内容做trim处理后就能得到预期结果。

Python示例代码

import re

input_text = """BEGIN       ) Tj
ET37.66 533 Td
( Td
(I NEED THIS TEXT      ) Tj
ET
BT
37.334 Td
(AND ALSO NEED THIS TEXT         ) Tj
ET
BT
37.55 Td
(------------"""

# 方法1实现
range_match = re.search(r'(?s)(?<=BEGIN).*?(?=----)', input_text)
if range_match:
    inner_text = range_match.group()
    results = [match.group(1).strip() for match in re.finditer(r'\((.*?)\)', inner_text)]
    print('\n'.join(results))

# 方法2实现
results = [match.group(1).strip() for match in re.finditer(r'(?s)(?<=BEGIN)(?:(?!----).)*?\((.*?)\)(?=(?:(?!----).)*----)', input_text)]
print('\n'.join(results))

运行后输出:

I NEED THIS TEXT
AND ALSO NEED THIS TEXT

内容的提问来源于stack exchange,提问作者Patrick Freitas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:50:48