在pyparsing中是否有“startswith”方法

时间:2011-09-28 16:50:23

标签: python parsing pyparsing

嘿,我编写了一个非常简单的解析器,它使用pyparsing检测文本中的一些标记,然后用不同的字符串替换它们。问题是,现在我的代码只适用于完全匹配。我想做的是检测部分匹配。例如,如果令牌是“foobar”,我想匹配像“foobarfoo”这样的词。有没有办法用pyparsing做到这一点?我看过这些例子并进行了一些研究,但我什么也没想到。

由于

编辑:

我有一个要匹配的令牌列表和文本中的单词列表。所以我想要一个考虑到这个事实的解决方案。令牌列表可能非常大。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

最简单的方法是在语法中使用pyparsing Regex表达式:

startsWithFoobar = Regex(r"foobar[a-zA-Z0-9_]+")