【pyparsing使用指导】基本字符匹配与查找

pyparsing这个库简单来说是简化了正则的使用,可以更“人性”的理解和使用正则。其使用教程在这里 以及这里

pyparsing里主要是写函数的应用,这里主要介绍几个常用的

单词匹配 Literal 和 Word


匹配单词, 例子如下

str='hello world!'
pattern=Literal ('hello') # 或者Word ('hello')
try:
    result = pattern.parseString(str)
    print result
except ParseException as pe:
    print "  No match: {0}".format(str(pe))

结果如下:


Word样例

Literal 和Word基本功能一致,都是匹配单词。
区别在于,

  • Literal是匹配完整单词,意味着要有空格分隔;而Word不需要匹配上开始就可以。
  • Literal匹配是按单词匹配;而Word匹配只要匹配到Word里的字符集合即可。
  • Literal功能较为单一,而Word功能更丰富一些。 Word具体介绍看这里

常用标识 nums,alphas,alphasnums, hexnums, alphas8bit, punc8bit, printables


  • nums
    表示数字
  • alphas
    表示字母
    上面的例子可以使用pattern=Word(alphas)来替代
  • alphasnums
    表示数字和字母
  • hexnums
    表示十六进制
  • alphas8bit
    表示ASCII编码的字母
  • punc8bit
    表示ASCII编码的非字母
  • printables
    表示非空字符的其他任何字符

nums使用例子如下

text='1+2=3'
integer = Word(nums)  # simple unsigned integer
try:
    result1 = integer.parseString(text)
    print result1
except ParseException as pe:
    print "  No match: {0}".format(str(pe))

结果如下


nums结果

但是如果text的第一个字母不是数字的话就会抛出异常,说明这里的解析是“匹配”而不是“查找

匹配(parseString)与查找(scanString)


上面的例子改一下,如果首字母不是数字,那么如何查找出所有的数字呢?

text='a1+2=3'
integer = Word(nums)  # simple unsigned integer
try:
    for tokens, start,end in integer.scanString(text):
        print tokens, start, end
except ParseException as pe:
    print "  No match: {0}".format(str(pe))

结果如下


查找结果

排除大小写敏感 CaselessLiteral

这个不难理解

str='HELLO WORLD!'
pattern=CaselessLiteral('hello')
try:
    result = pattern.parseString(str)
    print result
except ParseException as pe:
    print "  No match: {0}".format(str(pe))
大小写不敏感

排除匹配CharsNotIn

CharsNotIn是设置了一个合集,然后从左向右匹配字符串中不包含这个合集的子集。

text='hello world!'
pattern=CharsNotIn('abc')
try:
    result = pattern.parseString(text)
    print result
except ParseException as pe:
    print "  No match: {0}".format(str(pe))

下面例子中的合集为‘abc’,匹配中的单词不包含这三个字母,如果全匹配


全匹配
text='hello world!'
pattern=CharsNotIn('uvwxyz')
try:
    result = pattern.parseString(text)
    print result
except ParseException as pe:
    print "  No match: {0}".format(str(pe))

由于'hello world!'中包含w,所以要从这里截断


截断

你可能感兴趣的:(【pyparsing使用指导】基本字符匹配与查找)