Python 匹配特定字符串,忽略其他字符串

Python 匹配特定字符串,忽略其他字符串,python,pyparsing,Python,Pyparsing,如何使用pyparsing只匹配某些字符串?例如,我只想匹配 OneOrMore(Word("Apple")|Word("Ball")) 但是如果字符串是 "Apple Ball Cat" 然后我想忽略Cat并返回 ['Apple', 'Ball'] 我可以用regex来做这件事,但我想知道如何用pyparsing来做 编辑:“苹果猫球”还应给出['Apple','Ball'] 我试过了 correct = Word("Apple")|Word("Ball") pattern = OneO

如何使用pyparsing只匹配某些字符串?例如,我只想匹配

OneOrMore(Word("Apple")|Word("Ball"))
但是如果字符串是

"Apple Ball Cat"
然后我想忽略
Cat
并返回

['Apple', 'Ball']
我可以用regex来做这件事,但我想知道如何用pyparsing来做

编辑:
“苹果猫球”
还应给出
['Apple','Ball']

我试过了

correct = Word("Apple")|Word("Ball")
pattern = OneOrMore(~vulnTypes.suppress() + vulnTypes)
result = pattern.parseString(string)

正如我在评论中提到的,
Word
并不是真正用于匹配特定单词的类-它可以工作,但也可以接受许多其他单词。原因是
Word
接受一个包含当前表达式中允许的字符的字符串,并将匹配包含该字符串中一个或多个字符的任何单词组。例如,您可以使用
Word(“0123456789”)
解析任何整数
Word(“Apple”)
肯定会匹配“Apple”,但它也会匹配“AAAA”、“pplpelplepl”和另一个由字符“A”、“p”、“l”和“e”组成的单词。在这种情况下,我认为最好使用
关键字

最好从一些示例字符串开始:

samples = """\
    Apple
    Apple Ball
    Ball Apple
    Apple Cat
    Apple Cat Ball Daisy Ball"""

APPLE = Keyword("Apple")
BALL = Keyword("Ball")
既然你知道你想要“苹果”和“球”,但可能还有其他的,那么你可以尝试定义一个“其他任何东西”的表达式。现在可以使用
Word
了,因为我们希望匹配包含任何非空格字符的任何单词组(使用pyparsing的
printables
string)

由于您希望从解析的输出中抑制这些其他单词,因此在创建此catch all表达式时,我们添加了
.suppress()
调用

anything_else = Word(printables).suppress()
现在,这将匹配任何一组非空白字符,包括“Apple”和“Ball”。为了避免意外地丢失我们想要的单词,我们使用了“|”操作符(正如您在原始帖子中所做的那样),并确保
其他任何内容都列在最后。也就是说,所有其他选项都将首先进行测试,只有当我们没有匹配任何选项时,我们才会到达
anything\u else
catch all

现在,扫描仪表达式可以读取:

pattern = OneOrMore(APPLE | BALL | anything_else)
并使用以下方法对您的样本进行测试:

pattern.runTests(samples)
你应该只拿回你产出的苹果和球


(请注意,
关键字
区分大小写。如果您还想在“apple”和“ball”或“apple”或“ball”上进行匹配,请使用
caselesskyword

是的,我知道re模块,但我想知道如何使用pyparsing命令。到目前为止,您尝试了哪些方法?请展示你的作品。你知道所有你想跳过的单词吗?或者只是“任何不在这组已知单词中的东西”?是的,任何不在这组单词中的东西请仔细阅读单词、文字和关键字类之间的差异。我很确定Word不是你要找的课程。
pattern.runTests(samples)