gpt4 book ai didi

python - pyparsing中Word的非贪婪匹配?

转载 作者:太空宇宙 更新时间:2023-11-04 00:45:24 30 4
gpt4 key购买 nike

我想匹配以 _foo_bar 结尾的单词。我是这样写的:

identifier = Word(alphanums + '_')
string = identifier + Suppress('_') + oneOf('foo bar')

不幸的是,我意识到 identifier 是贪婪的并且消耗了所有关键字。

如何强制 identifier 不贪心?

$ string.parseString('a_keyword_foo')
ParseException: Expected "_" (at char 13), (line:1, col:14)

一些有效的关键字:

a_keyword_foo          # ['a_keyword', 'foo']
foo_bar_foo # ['foo_bar', 'foo']
bar_bar # ['bar', 'bar']

一些无效的关键字:

keyword_foo_foobar
2keywords_bar # The leading number is perhaps another question...
foo _bar
_foo

最佳答案

一旦知道要查找的内容,就可以使用 pp.SkipTo :

In [38]: foo_or_bar = Literal('foo') | Literal('bar')

In [39]: string = SkipTo(Literal('_') + foo_or_bar) + Literal('_') + foo_or_bar

In [42]: string.parseString('frumpy _foo')
Out[42]: (['frumpy ', '_', 'foo'], {})

不幸的是,您也会遇到这种行为:

In [44]: string.parseString('frumpy _foo _foo')
Out[44]: (['frumpy ', '_', 'foo'], {})

以防模式出现多次。

问题是 pyparsing 不进行前瞻。如果您也担心第二种情况,则必须将其定义为一个或多个以下划线 + foo 或 bar 结尾的事物(如上所述),然后取最后一个。

关于python - pyparsing中Word的非贪婪匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39933553/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com