Python学习笔记(9)正则表达式

  

元字符

. 代指所有除了换行符的所有字符 通配符

 

  >>> re.findall(r'.', '1aA@#')

  ['1', 'a', 'A', '@', '#']

 

^ 对开始进行匹配

 

   >>> re.findall(r'^\d*', '123456')

   ['123456']
   >>> re.findall(r'^\d*', 'ABC123456')

   ['']

 

$ 对末尾进行匹配

 

  >>> re.findall(r'\d+$', '123ABC456')

  ['456']

  >>> re.findall(r'\d+$', '123ABC456ABC')

  []

 

* 重复匹配 [0, +oo]

 

  >>> re.findall(r'.*', '123abcABC')

  ['123abcABC', '']

 

+ 重复匹配 [1, +oo]

 

  >>> re.findall(r'.+', '123abcABC')
  ['123abcABC']

 

?[0,1]

 

  >>> re.findall(r'a?', 'abcdabc')

  ['a', '', '', '', 'a', '', '', '']

 

{} 自定义匹配次数

 

  >>> re.findall(r'a{3}', 'aaabaaba')

  ['aaa']

 

[] 字符集 取消元字符的特殊功能(\^-)除外 [1-9] 1到9

 

  >>> re.findall(r'[1-9]abc', '1abcds5abc')

  ['1abc', '5abc']

  

  >>> re.findall(r'[^1]', '123')
  ['2', '3']

 

  >>> re.findall(r'[++]{2}', '++112233++')
  ['++', '++']

  

 

^ 放在中括号里取反

  

  >>> re.findall(r'[^1]', '123123')
  ['2', '3', '2', '3']

 

\d 数字[0-9] \D任何非数字[^0-9]

  

  >>> re.findall(r'\d', '123abc456')
  ['1', '2', '3', '4', '5', '6']
  >>> re.findall(r'\D', '123abc456')
  ['a', 'b', 'c']

 

\s字符 任何空白字符[\t\n\r\f\v] \S任何非空白字符[^\t\n\r\f\v]

 

  >>> re.findall(r'\s', ' ')
  [' ', ' ', ' ', ' ']

  >>> re.findall(r'\S', ' 123 123')
  ['1', '2', '3', '1', '2', '3']

 

\w 任何字母数字字符[a-zA-Z0-9] \W任何非字母数字字符[^a-zA-Z0-9]

  

  >>> re.findall(r'\w', '123abcABC@#$')
  ['1', '2', '3', 'a', 'b', 'c', 'A', 'B', 'C']

  >>> re.findall(r'\W', '123abcABC@#$')
  ['@', '#', '$']

 

\b一个单词辩解,也就是指单词和空格间的位置 特殊字符

  

  >>> re.findall(r'\b', 'w n')
  ['', '', '', '']

 

findall():所有结果都返回到一个列表

 

search():返回一个对象,对象可以调用group()返回结果

  

  >>> re.search(r'\d{3}', 'abc123abc456').group()
  '123'

  

match() 只在字符串开始匹配  

 

  >>> re.match(r'\d{3}', 'abc123abc456')
  >>> re.match(r'\w{3}', 'abc123abc456')
  <_sre.SRE_Match object; span=(0, 3), match='abc'>
  >>> re.match(r'\w{3}', 'abc123abc456').group()
  'abc'

 

re.split()分割

  >>> re.split(r'\s+', 'a b c')

  ['a', 'b', 'c']

  

  >>> re.split(r'\s+,', 'a ,b ,c ,d')
  ['a', 'b', 'c', 'd']

 

 

 

 

re.sub('规则', '替换字符', '字符串', 替换次数)查找替换

  

  >>> re.sub(r'\d', '*', '125ddesf365sa5df5')
  '***ddesf***sa*df*'
  >>> re.sub(r'\d', '*', '125ddesf365sa5df5', 3)
  '***ddesf365sa5df5'

 

re.subn 返回替换了多少次

 

  >>> re.subn(r'\d', '*', '125ddesf365sa5df5')

  ('***ddesf***sa*df*', 8)

 

re.compile规则编译成对

  

  >>> p = re.compile('\d')
  >>> s = p.findall('123abc')
  >>> s
  ['1', '2', '3']

 

finditer 返回一个迭代器

 

  >>> s = re.finditer(r'\d', '123abc')
  >>> s
  <callable_iterator object at 0x02C0EFB0>

  >>> next(s)
  <_sre.SRE_Match object; span=(0, 1), match='1'>
  <_sre.SRE_Match object; span=(1, 2), match='2'>
  >>> next(s)
  <_sre.SRE_Match object; span=(2, 3), match='3'>
  >>> next(s)
  Traceback (most recent call last):
  File "<pyshell#74>", line 1, in <module>
  next(s)
  StopIteration

 

 

  >>> m = re.match(r'^(\w{3}).(\w{2,12})@qq.com$','www.946085650@qq.com')
  >>> m
  <_sre.SRE_Match object; span=(0, 20), match='www.946085650@qq.com'>
  >>> m.groups()
  ('www', '946085650')
  >>> m.group(1)
  'www'
  >>> m.group(2)
  '946085650'

 

贪婪匹配

  

  >>> re.match(r'^(\d+?)(0*)$', '1234560000').groups()
  ('123456', '0000')
  >>> re.match(r'^(\d+)(0*)$', '1234560000').groups()
  ('1234560000', '')

posted on 2018-04-13 14:58  童话与海  阅读(146)  评论(0)    收藏  举报

导航