python - 如何使用字面量来分隔一个或多个单词?

标签 python pyparsing

我需要制定一个规则来评估以下表达式。

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/

相关文章:

python - 如何覆盖 Django 中的 model.Manager.create() 方法?

python - 与 CPython 相比,PyPy 占用大量内存

python - 如何快速找到 2 个不同数组中所有元素对的总和

python - 随机选择数据框中不重复的两个值

python - pyparsing:字典列表的语法(erlang)

python - 通过匹配括号评估字符串

python - 如何在类中正确使用和定义属性。 tkinter 粘性按钮网格,可单独对功能使用react

latex - 扩展matplotlib mathtext解析器

python - Pyparsing:空间作为有效标记

python - Pyparsing 顺序未知且某些项目可能丢失的字符串