逻辑运算符有如下几种,一一来看。
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))
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))
OneOrMore
和ZeroOrMore类似,就是至少次数为1
NotAny
逻辑上的非,即不包含。但是这个函数如果匹配的话是返回一个空`[]``。 不匹配抛出异常。不理解。
网友评论