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

如何用PyParsing的parseString()提取两个标记间的字符串?

使用PyParsing的parseString()提取标记间内容的方法

你遇到的问题很典型:parseString()和searchString()的核心区别在于,parseString()要求从字符串的开头到结尾完全匹配你的规则,而searchString()会在整个字符串中查找符合规则的片段。你的原始规则只定义了AAA和ZZZ包裹的部分,自然无法匹配开头的qwerty或gfgfd,所以会抛出解析异常。

要让parseString()也能得到相同结果,只需要调整规则,把前后的无关内容也纳入匹配范围,同时保留我们需要的中间部分。这里有两种简洁的实现方式:

方法1:跳过前后无关内容并提取目标

import pyparsing as pp

s = 'qwertyAAA1234ZZZazerty'
# 规则:跳过开头到AAA,匹配目标片段,再跳过剩余内容
rule = pp.SkipTo("AAA") + pp.nestedExpr("AAA", "ZZZ") + pp.SkipTo(pp.StringEnd())
result = rule.parseString(s)
# 提取索引1的元素,就是我们要的中间内容
print(result[1])  # 输出: [['1234']]

方法2:用Suppress忽略无关内容(更简洁)

如果不想保留前后的无关内容,可以用Suppress()直接忽略它们,这样解析结果里就只有我们需要的部分:

import pyparsing as pp

s = 'qwertyAAA1234ZZZazerty'
# 规则:忽略开头到AAA的内容,匹配目标片段,忽略后续内容
rule = pp.Suppress(pp.SkipTo("AAA")) + pp.nestedExpr("AAA", "ZZZ") + pp.Suppress(pp.SkipTo(pp.StringEnd()))
result = rule.parseString(s)
print(result)  # 输出: [['1234']]

这两种方式都能让parseString()成功解析整个字符串,同时得到和searchString()一致的提取结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 08:12:46