获取BEGIN与----间括号内文本的正则表达式需求
解决方案
要提取关键词BEGIN与----之间的所有括号内文本,可以通过以下两种方式实现:
方法1:分两步锁定范围再提取内容
先匹配出
BEGIN到----之间的全部内容:(?s)(?<=BEGIN).*?(?=----)(?s):开启单行模式,让.能匹配换行符,支持跨多行匹配(?<=BEGIN):确保匹配起点在BEGIN之后.*?(?=----):非贪婪匹配到----之前的所有内容,避免过度匹配
在上述匹配到的内容里,全局提取所有括号内的文本:
\((.*?)\)捕获组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
相关产品推荐
相关产品推荐

