我需要制定一个规则来评估以下表达式。
Sao Paulo to Rio de Janeiro >> ["Sao Paulo", "Rio de Janeiro"]
Rio de Janeiro to Brasilia >> ["Rio de Janeiro", "Brasilia"]
Brasilia to Sao Jose dos Pinhais >> ["Brasilia", "Sao Jose dos Pinhais"]
尝试失败
from pyparsing import *
source = OneOrMore(Word(alphas))
target = OneOrMore(Word(alphas))
expression = source + Literal('to') + target
# input string
phase = "Sao Paulo to Rio de Janeiro"
# parse input string
print phase, "->", expression.parseString( phase )
最佳答案
问题在于 OneOrMore(Word(alphas)) 是贪婪的,因为 'to' 与 Word(alphas) 匹配,您需要为其包含一个前瞻。
您可以通过添加一个 NOT(又名 ~)运算符来使其不贪婪,该运算符专门查找“to”并将停止匹配。那么问题是“to”之前的任何单词都不是表达式的一部分。所以你必须在最后加上一个单词(alphas)。
to = Suppress(Literal('to'))
src = Group(ZeroOrMore(Word(alphas) + ~FollowedBy(to)) + Word(alphas)).setResultsName('src')
dst = OneOrMore(Word(alphas)).setResultsName('dst')
exp = src + to + dest
phase = "Sao Paulo to Rio de Janeiro"
# parse input string
s = exp.parseString( phase )
当你运行它时,你会得到你想要的结果:
['Sao', 'Paulo']
['Rio', 'de', 'Janeiro']
关于python - 如何使用字面量来分隔一个或多个单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20313689/