Python常用模块用法分析

2019-10-05 20:30:49于丽

f.close()

regular expression 正则表达式 import re

简单的regexp

p = re.compile("abc") if p.match("abc") : print "match"
上例中首先生成一个pattern(模式),如果和某个字符串匹配,就返回一个match object
除某些特殊字符metacharacter元字符,大多数字符都和自身匹配。
这些特殊字符是 。^ $ * + ? { [ ] | ( )

字符集合(用[]表示)

列出字符,如[abc]表示匹配a或b或c,大多数metacharacter在[]中只表示和本身匹配。例:

a = ".^$*+?{|()" 大多数metachar在[]中都和本身匹配,但"^[]"不同
p = re.compile("["+a+"]")
for i in a:
  if p.match(i):
 print "[%s] is match" %i
  else:
 print "[%s] is not match" %i

在[]中包含[]本身,表示"["或者"]"匹配.用[和]表示.
^出现在[]的开头,表示取反.[^abc]表示除了a,b,c之外的所有字符。^没有出现在开头,即于身身匹配。
-可表示范围.[a-zA-Z]匹配任何一个英文字母。[0-9]匹配任何数字。
在[]中的妙用。
  d [0-9]
  D [^0-9]
  s [ tnrfv]
  S [^ tnrfv]
  w [a-zA-Z0-9_]
  W [^a-zA-Z0-9_]
  t 表示和tab匹配, 其他的都和字符串的表示法一致
  x20 表示和十六进制ascii 0x20匹配
  有了,可以在[]中表示任何字符。注:单独的一个"."如果没有出现[]中,表示出了换行n以外的匹配任何字符,类似[^n].

regexp的重复

{m,n}表示出现m个以上(含m个),n个以下(含n个).  如ab{1,3}c和abc,abbc,abbbc匹配,不会与ac,abbbc匹配。
m是下界,n是上界。m省略表下界是0,n省略,表上界无限大。
*表示{,} +表示{1,} ?表示{0,1}
最大匹配和最小匹配 python都是最大匹配,如果要最小匹配,在*,+,?,{m,n}后面加一个?.
match object的end可以得到匹配的最后一个字符的位置。
  re.compile("a*").match('aaaa').end()     4  最大匹配
  re.compile("a*?").match('aaaa').end()    0  最小匹配

使用原始字符串

字符串表示方法中用表示字符.大量使用影响可读性。
解决方法:在字符串前面加一个r表示raw格式。
a = r"a" print a 结果是a
a = r""a" print a 结果是"a

使用re模块

先用re.compile得到一个RegexObject 表示一个regexp
后用pattern的match,search的方法,得到MatchObject
再用match object得到匹配的位置,匹配的字符串等信息

RegxObject常用函数:

  >>> re.compile("a").match("abab") 如果abab的开头和re.compile("a")匹配,得到MatchObject
  <_sre.SRE_Match object at 0x81d43c8>
  >>> print re.compile("a").match("bbab")
  None 注:从str的开头开始匹配