邏輯運算符有如下幾種漱病,一一來看。
And
匹配上的與操作藻丢,相當于一個匹配規(guī)則連接上另一個匹配規(guī)則剪撬。
下例匹配一個加法運算式,組合了5個匹配規(guī)則
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))
結(jié)果
加法運算式
或者使用+代替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
這個或的關(guān)系郁岩,也好理解婿奔。
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))
結(jié)果
與運算
可以使用^ 來代替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,但是不同的是问慎,它于高級語言里的“或”有一樣的“短路效應(yīng)”萍摊。 即匹配到第一個后面就不再匹配。
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
引用別處定義的匹配規(guī)則
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類似冰木,就是至少次數(shù)為1
NotAny
邏輯上的非,即不包含笼恰。但是這個函數(shù)如果匹配的話是返回一個空`[]``踊沸。 不匹配拋出異常。不理解社证。