一、re库的调用

import re

二、正则表达式类型

  • raw string类型(原生字符串类型,即不包括转义符类型):r'text'
  • string类型,更繁琐。

三、Re库主要功能函数

  函数              说明

re.search()        在一个字符串中搜索匹配正则表达式的第一个位置,然后返回match对象

re.match()         从第一个字符串的开始位置起匹配正则表达式,返回match对象

re.findall()         搜索字符串,以列表类型返回全部能匹配的子串

re.split()         将一个字符串按照正则表达式匹配结果进行分割,返回列表类型

re.finditer()         搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象

re.sub()         在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串

 

①re.search(pattern,string,flags=0)

  • pattern:正则表达式的字符串或原生字符串表示
  • string:待匹配的字符串
  • flags:正则表达式使用时的控制标记

  fiags常用标记:

  1. re.I   re.IGNORECASE                   忽略正则表达式的大小写,[A-Z]能够匹配小写字符
  2. re.M re.MULTILINE                   正则表达式中的^操作符能够将给定字符串的每行当做匹配开始
  3. re.S re,DOTALL                            正则表达式中的.操作符n能够匹配所有字符,默认匹配除换行外的所有字符
1 import re
2 
3 match = re.search(r'[1-9]\d{5}','BIT 100081')
4 if match:
5     print(match.group(0))


>>>100081

②re.macth(pattern,string,flags=0)

  • pattern:正则表达式的字符串或原生字符串表示
  • string:待匹配的字符串
  • flags:正则表达式使用时的控制标记
1 import re
2 match = re.match(r'[1-9]\d{5}','100081 200012 BIT')
3 if match:
4     print(match.group(0))

>>>100081

③re,findall(pattern,string,flags=0)

  • pattern:正则表达式的字符串或原生字符串表示
  • string:待匹配的字符串
  • flags:正则表达式使用时的控制标记
1 import re
2 
3 match = re.findall(r'[1-9]\d{5}','BIT100081 ICD100085')
4 print(match)

>>>['100081', '100085'

④re.split(pattern,string,maxsplit=0,flags=0)

  • pattern:正则表达式的字符串或原生字符串表示
  • string:待匹配的字符串
  • maxsplit:最大分割数,剩余部分作为最后一个元素输出
  • flags:正则表达式使用时的控制标记
1 import re
2 
3 macth = re.split(r'[1-9]\d{5}','BIT100081 ICD100085')
4 print(macth)
5 
6 macths = re.split(r'[1-9]\d{5}','BIT100084 ICD100085' ,maxsplit=1)
7 print(macths)

>>>['BIT', ' ICD', '']
>>>['BIT', ' ICD100085']

⑤re.finditer(pattern,string,flags=0)

  • pattern:正则表达式的字符串或原生字符串表示
  • string:待匹配的字符串
  • flags:正则表达式使用时的控制标记
1 import re
2 
3 macth = re.finditer(r'[1-9]\d{5}','BIT100084 ICD100085')
4 for i in macth:
5     if i :
6         print(i.group(0))

>>>100084
  10008

⑥re.sub(pattern, repl, string, count=0, flags=0)

  • pattern:正则表达式的字符串或原生字符串表示
  • repl:替换字符串的字符串
  • string:待匹配的字符串
  • count:替换的次数
  • flags:正则表达式使用时的控制标记
1 import re
2 
3 macth = re.sub(r'[1-9]\d{5}','110021','BIT100084 ICD100085')
4 print(macth)
5 
6 macths = re.sub(r'[1-9]\d{5}','110021','BIT100084 ICD100085',count=1)
7 print(macths)

>>>BIT110021 ICD110021
>>>BIT110021 ICD10008

四、正则表达式的另外一种等价用法

使用re.compile()方法将正则表达式编译成正则表达式对象,正则表达式的六个方法都能使用

r = re.compile(pattern,flags=0)

  • pattern:正则表达式的字符串或原生字符串表示
  • flags:正则表达式使用时的控制标记
 1 import re
 2 
 3 res = re.compile(r'[1-9]\d{5}')
 4 macth = re.search(res,'BIT100084 ICD100085')
 5 if macth:
 6     print(macth.group(0))
 7 
 8 f = re.match(res,'100084BIT 100085IDC')
 9 if f:
10     print(f.group(0))
11 
12 d = re.findall(res,'100084BIT 100085IDC')
13 print(d)

>>>100084
>>>100084
>>>['100084', '100085'

 五、Re库的Match对象

1、match对象的属性

.string        待匹配的文本

.re           匹配时使用的pattern对象(正则表达式)

.pos           正则表达式搜索文本的开始位置

.endpos       正则表达式搜索文本的结束位置

2、match对象的方法

.group(0)      获得匹配后的字符串

.start()        匹配字符串在原始字符串的开始位置

.end()         匹配字符串在字符串的结束位置

.span()       返回(.start(),end.())

六、贪婪匹配

Re库默认采用贪婪匹配,即输出匹配最长的字符串

1 import re
2 
3 f = re.search(r'PY.*?N','PYDASCEDNDFCSNWESASNDE')
4 print(f.group(0))

>>>PYDASCED

输入最小匹配字符串

import re

f = re.search(r'PY.*?N','PYDASCEDNDFCSNWESASNDE')
print(f.group(0))

>>>PYDASCED

最小匹配操作符

*?        前一个字符0次或者无数次扩展,最小匹配

+?          前一个字符1次或者无数次扩展,最小匹配

??        前一个字符0次或1次扩展,最小匹配

{m,n}?      扩展前一个字符m至n次(含n),最小匹配

posted on 2020-02-07 20:49  小和尚不吃素  阅读(320)  评论(0编辑  收藏  举报