美文网首页
【pyparsing使用指导】匹配中的逻辑运算

【pyparsing使用指导】匹配中的逻辑运算

作者: 安安爸Chris | 来源:发表于2018-12-11 20:04 被阅读0次

逻辑运算符有如下几种,一一来看。

And

匹配上的与操作,相当于一个匹配规则连接上另一个匹配规则。
下例匹配一个加法运算式,组合了5个匹配规则

text='1+2=3'
pattern=And([Word(nums, max=1), Word('+', max=1), Word(nums, max=1), Word('='), Word(nums, max=1)])
try:
    result = pattern.parseString(text)
    print result
except ParseException as pe:
    print "  No match: {0}".format(str(pe))

结果


加法运算式

或者使用+代替And

text='1+2=3'
pattern=Word(nums, max=1)+Word('+', max=1)+Word(nums, max=1)+Word('=')+Word(nums, max=1)
try:
    result = pattern.parseString(text)
    print result
except ParseException as pe:
    print "  No match: {0}".format(str(pe))

效果是一样的

Or

这个或的关系,也好理解。

text='123abc'
pattern=Or([Word(nums), Word(alphas)])
try:
    result = pattern.parseString(text)
    print result
except ParseException as pe:
    print "  No match: {0}".format(str(pe))

结果


与运算

可以使用^ 来代替Or

text='123abc'
pattern=Word(nums)^ Word(alphas)
try:
    result = pattern.parseString(text)
    print result
except ParseException as pe:
    print "  No match: {0}".format(str(pe))

MatchFirst

这个类似于Or,但是不同的是,它于高级语言里的“或”有一样的“短路效应”。 即匹配到第一个后面就不再匹配。

text='123abc'
pattern=MatchFirst([Word('1234abcd'), Word(nums)])
try:
    result = pattern.parseString(text)
    print result
except ParseException as pe:
    print "  No match: {0}".format(str(pe))
短路匹配

可以使用|来代替MatchFirst

text='123abc'
pattern=Word('1234abcd') | Word(nums)
try:
    result = pattern.parseString(text)
    print result
except ParseException as pe:
    print "  No match: {0}".format(str(pe))

Optional

引用别处定义的匹配规则

text='123abc-'
negative = Literal('-')
pattern=Word('1234abcd') + Optional(negative)
try:
    result = pattern.parseString(text)
    print result
except ParseException as pe:
    print "  No match: {0}".format(str(pe))
optional

ZeroOrMore

跟Optional类似,但是表明可能不止一处

text='123abc---'
negative = Literal('-')
pattern=Word('1234abcd') + ZeroOrMore(negative)
try:
    result = pattern.parseString(text)
    print result
except ParseException as pe:
    print "  No match: {0}".format(str(pe))
ZeroOrMore

OneOrMore

和ZeroOrMore类似,就是至少次数为1

NotAny

逻辑上的非,即不包含。但是这个函数如果匹配的话是返回一个空`[]``。 不匹配抛出异常。不理解。

相关文章

网友评论

      本文标题:【pyparsing使用指导】匹配中的逻辑运算

      本文链接:https://www.haomeiwen.com/subject/jpgehqtx.html