RE regular expression正则表达式 regex
正则表达式的使用过程:生成字符串(符合正则语法)--->编译成正则表达式特征-->进行匹配
编译前只是一个符合正则语法的字符串,编译后才是真正的正则表达式
python字符串的先验知识
ASCII字符集是最早的字符集,只有128个
unicode字符集包括所有语言,python3以上字符默认用unicode编码
raw string代表原生字符串(非专义)的原始字符串
unicode string代表字符串,会将里面的字符转义
注意!!!python re中不涉及转义,字符串和原生字符串有一样效果,re.函数不编译也可用
\(行尾) 续航符 \\反斜线 \'单引号 \"双引号 \000空 \oyy 八进制数 \xyy 十六进制数 \other其它字符以普通格式输出
\a响铃 \b退格 \e转义 \f换页 \n换行 \r回车 \t横向制表符 \v纵向制表符
博客:aariety介绍的比较详细
#字符串""中可以使用\"表示"字符
#字符串中可以使用\\表示\字符
a1="ab\\cd" #转义,认为字符串是ab\cd 等同r"ab\cd"
b1="ab\'cd" #认为字符串是ab'cd 等同r"ab'cd"
c1="ab\"cd" #认为字符串是ab"cd 等同r'ab"cd'
d1="\'\"" #表达字符'" 无法用r的单双引号表示!!可以用'''
#原生字符串""中无法表示"字符
#原生字符串中无法表示单个\字符
a2=r"ab\\cd" #不转义,认为字符串是ab\\cd 等同"ab\\\\cd"
b2=r"ab\'cd" #认为字符串是ab\'cd 等同"ab\\\'cd"
c2=r"ab\"cd" #认为字符串是ab\"cd 等同"ab\\\"cd"
d2="\'\"" #表达字符\'\" 等同"\\\'\\\""
操作符(正则表达式由字符和操作符构成)
. 任何单字符
[] 字符集,取值范围。[abc]表示a、b、c,[a-z]表示a到z的单字符
[^] 非字符集,给出排除范围。[^abc]表示非a、b、c的单字符
* 前一个字符0次或无限次扩展
+ 前一个字符1次或无限次扩展
? 前一个字符0次或1次扩展
| 左右表达式任意一个。abc|def表示abc、def均可
{m} 扩展前一个字符m次。ab{2}c表示abbc
{m,n} 扩展前一个字符m到n次(含n)。ab{1,2}c表示abc、abbc
^匹配字符串的开头。注意与[^]相区分
$匹配字符串的结尾
()分组,内部只能用|
\d数字,等价于[0-9]
\w单词字符,等价于[a-zA-Z0-9]
RE库
re.search(pattern,string,flags=0)
pattern字符串或原生字符串
string待匹配字符串
flags控制标记
控制标记:
re.I re.IGNORECASE忽略正则表达式的大小写
re.M re.MULTILINE正则表达式^能每行匹配
re.S re.DOTALL点.匹配所有字符,默认是不匹配换行
re.match(pattern,string,flags=0)
re.findall(pattern,string,flags=0)
re.split(pattern,string,maxsplit=0,flags=0)
maxsplit:最大分割数,剩余部分作为最后一个元素输出
re.finditer(pattern,string,flags=0) 返回迭代类型,每个迭代元素是match对象
re.sub(pattern,repl,string,count=0,flags=0) 返回替换后的字符串
repl:替换匹配字符串的字符串
count:匹配最大的替换次数
re.compile(pattern,flags=0) 将正则表达式编译,可用regex调用上面六个函数
#函数式用法,一次性操作
rst = re.search(r'[1-9]\d{5}','BIT 100081')
#面向对象用法:编译后多次操作
pat = re.compile(r'[1-9]\d{5}')
rst = pat.search('BIT 100081')
Match对象
属性
.string待匹配的文本,返回string
.re匹配时使用的正则表达式
.pos文本开始位置,返回int
.endpos文本结束位置,返回int
方法
.group(0)匹配后的字符串,返回第一次返回的结果
.start()匹配字符串在原始字符串的开始位置,返回int
.end()匹配字符创在原始字符创的结束位置,返回int
.span()返回(.start(),.end()),返回元组类型
贪婪匹配和最小匹配
match = re.match(r'PY.*N','PYTHONCNDN')
match.group(0)
#贪婪匹配,返回PYTHONCNDN
match = re.match(r'PY.*?N','PYTHONCNDN') #注意加了个?号
match.group(0)
#最小匹配,返回PYTHON
最小匹配的操作符:*? +? ?? {m,n}?