正则表达式
regular expression RE regex
一 定位
简洁的一组的字符串表达式
通用字符串表达框架
判断字符串特征归属
二 正则表达式常用操作符
三 语法实例
P(Y|YT|YTH|YTHO)?N ‘PN’,’PYN’,PYTN’,PYTHN’,PYTHON’
PYTHON+ ‘PYTHON’,PYTHONN’PYTHONNN’…………………
PY[TH]ON ‘PYTON’,’PYHON’
PY[^TH]ON ‘PYaON’,’PY&ON’,’PY_ON’………………………
PY{:3}N ‘PN’,’PYN’,’PYYN’,’PYYYN’
注:{:3}表示拓展前一个字符0~3次
四 经典实例
Name | Academy |
---|---|
^[A-Za-z]+$ | 26个字母组成的字符串 |
^[A-Za-z0-9]+$ | 26个字母和数字组成的字符串 |
^-?\d+$ | 任意整数型字符串 |
^[0-9][1-9][0-9]$ | 正整数型字符串 |
[1-9]\d{5} | 邮政编码 |
[\u4e00-\u9fa5] | 中文字符 |
Re库使用
import re
一 正则表达式表示类型
raw string
表示为: r’text’
EG: r’[1-9]\d{5}’
r’\d{3}-\d{8}|\d{4}-\d{7}’
raw string是不包含对转移符再次转义的字符串
可以避免使用如’\’表示’\’
二 Re库主要功能函数
1. re.search(pattern,string,flags=0)
flages控制标记
EG
import re
match=re.search( r’[1-9]\d{5}’ , ‘BIT 10093’)
if match:
print ( match.group(0) )10093
2. re.match( pattern,string,flags,flags=0 )
不同于re.search( ) ,re.match( )是从开始位置匹配
re.match( r’[1-9]\d{5}’ , ‘BIT 10093’ )不会匹配出结果
3. re.findall( pattern,string,flags=0 )
EG
ls = re.findall( r’[1-9]\d{5}’, ‘BIT 10081 TSU 10093’)
print ( ls )[‘10081’, ‘10093’]
4. re.split ( pattern,string,maxsplit=0,flags=0 )
maxsplit: 最大分割数,剩余部分作为后一个元素输出
EG
re.split( r’[1-9]\d{5}’, ‘BIT 10081 TSU 10083’ )
[ ‘BIT’, ‘TSU’, ”]
re.split( r’[1-9]\d{5}’, ‘BIT 10081 TSU 10083’, maxsplit=1 )
[‘BIT’ , ‘TSU 10083’]
注意:maxsplit的数值决定了其割掉的段的数量
5. finditer( pattern, string, flags=0 )
EG
for m in re.finditer( r’[1-9]\d{5}’, ‘BIT 10081 TSU 10083’ ):
if m:
print( m.group (0) )10081
10083
6. re.sub(pattern, repl, string, count=0, flags=0 )
repl: 替换匹配字符串的字符串
EG
re.sub( r’[1-9]\d{5}’, ‘:zipcode’ , ‘BIT 10081 TSU10083’ )
‘BIT :zipcode TSU :zipcode’
三 Re库的等价用法
regex = re.complie( pattern, flags=0 )
EG
regex = re.complie( r’[1-9]\d{5}’ )