嘿,我用 pyparsing 编写了一个非常简单的解析器,它检测文本中的一些标记,然后用不同的字符串替换它们。问题是现在我的代码只适用于完全匹配。我想做的也是检测部分匹配。例如,如果令牌是“foobar”,我想匹配一个像“foobarfoo”这样的词。有没有办法用pyparsing做到这一点?我查看了这些示例并进行了一些研究,但我一无所获。
谢谢
编辑:
我有一个要匹配的标记列表和文本中的单词列表。所以我想要一个考虑到这一事实的解决方案。令牌列表可能非常大。
Literal('foobar')+Word(pyp.alphas)
定义了一个 pyparsing ParseExpression,它要求文本以开头,'foobar'
后跟任何字母字符。例如:
import pyparsing as pyp
ident = pyp.Combine(pyp.Literal('foobar')+pyp.Word(pyp.alphas))('foo')
for match in ident.searchString('bar foobarfoo bar foobarbafoo'):
print(match.foo)
产量
foobarfoo
foobarbafoo
最简单的方法是在语法中使用 pyparsing Regex 表达式:
startsWithFoobar = Regex(r"foobar[a-zA-Z0-9_]+")