gpt4 book ai didi

python - 当匹配失败时 StringEnd() 引发异常 - PyParsing

转载 作者:行者123 更新时间:2023-12-01 05:58:18 26 4
gpt4 key购买 nike

以下打印“pass”:

pattern = Word(alphanums) + StringEnd()
str=" bar "
results = pattern.parseString(str)
if 1 == len(results) && "bar" == results[0] :
print("pass")
else:
print("fail")

但这会在 class StringEndparseImpl 中抛出异常(当“bar”中“r”后面的字符不是字符串结尾时):

pattern = Word(alphanums) + StringEnd()
str=" bar foo "
results = pattern.parseString(str) # <-- exception raised

就像这样:

pattern = Word(alphanums)
str = " bar foo"
results = pattern.parseString(str,parseAll=True)

我希望第二/第三个 parseString 调用只返回一个空数组,因为它显然不满足语法。

谁能帮我理解为什么?

(应该是显而易见的,但要运行你需要“from pyparsing import *”;我也使用 python3.2 和 pyparsing 1.5.6)

最佳答案

当您在语法上调用 parseString 时,您是在告诉它“使用此语法从头开始解析此字符串”。它必须匹配某些内容,否则会引发异常。当您使用 parseAll=True 时,这一点更加正确。您说的是“将整个字符串与此语法进行匹配”。如果不全部匹配,则出现错误。 parseString 不是一种“可选”类型的匹配,如果您尝试匹配错误的语法,它只会默默地失败。如果某些内容“显然与语法不匹配”,那么正是它应该引发错误的时候。

您可能想尝试 searchString。这将只查找字符串中的所有匹配项,无论它们在哪里:

>>> pattern = pyp.Word(pyp.alphanums)
>>> pattern.searchString(" bar foo ")
([([u'bar'], {}), ([u'foo'], {})], {})

关于python - 当匹配失败时 StringEnd() 引发异常 - PyParsing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11546836/

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