http://www.regexlab.com/zh/regref.htm
正则表达式可以理解为一种字符结构,在python里运用re模块,利用“正则表达式语法构造的正则表达式”对“字符串”进行操作。
1.正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
2.构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。
3.常用的正则表达式构造语法小抄表可以参考:
4.正则表达式匹配可视化工具:
https://regexr.com/
https://regexper.com/
5.Python里应用正则表达式的re模块:即可以调用re模块里的各种方法,在方法的参数上:用正则表达式参数与待检查的字符串片段参数进行匹配和输出。
5.1)re.match尝试从字符串的开始匹配一个模式 。
re.match的函数原型为:re.match(pattern, string, flags)
第一个参数是pattern正则表达式,如果匹配成功,则返回一个Match,否则返回一个None;第二个参数string表示要匹配的字符串;第三个参数flags是标致位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
>>>import re
>>>string='Welcome to RegExr v2.1 by gskinner.com, proudly hosted by Media Temple!'
#匹配字符串string开头是小写字母
>>>pattern='[a-z]'
>>>print(re.match(pattern,string))
None
#匹配字符串string开头是大写字母
>>>pattern1='[A-Z]'
>>>print(re.match(pattern1,string))
<_sre.SRE_Match object; span=(0, 1), match='W'>
5.2)re.search函数会在字符串内查找模式匹配 , 只到找到第一个匹配然后返回,如果字符串没有匹配,则返回None。
re.search的函数原型为: re.search(pattern, string, flags)
每个参数的含意与re.match一样。
>>>import re
>>>string='Welcome to RegExr v2.1 by gskinner.com, proudly hosted by Media Temple!'
#匹配搜索字符串string中含有的小写字母
>>>pattern='[a-z]'
>>>print(re.search(pattern,string))
<_sre.SRE_Match object; span=(1, 2), match='e'>
re.match与re.search的区别:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
5.3)re.sub用于替换字符串中的匹配项。
re.sub的函数原型为:re.sub(pattern, repl, string, count)
第二个参数repl是替换后的字符串;第四个参数count指替换个数 —— 默认为0,表示每个匹配项都替换。
re.sub还允许使用函数对匹配项的替换进行复杂的处理 , 即repl处的替换通过lambda轻量级函数定义。
>>>import re
>>>string='Welcome to RegExr v2.1 by gskinner.com, proudly hosted by Media Temple!'
>>>pattern='[a-z]'
#用'-'替换字符串string中包含的正则表达式pattern的模式 , 并且只替换4次
>>>print(re.sub(pattern, '-', string,4))
W----me to RegExr v2.1 by gskinner.com, proudly hosted by Media Temple!
5.4)re.split可用来分割字符串。
>>>import re
>>>string='Welcome to RegExr v2.1 by gskinner.com, proudly hosted by Media Temple!'
#用正则表达式r'\s+'(空格)分割string
>>>print(re.split(r'\s+',string))
['Welcome', 'to', 'RegExr', 'v2.1', 'by', 'gskinner.com,', 'proudly', 'hosted', 'by', 'Media', 'Temple!']
5.5)re.findall可以获取字符串中所有匹配的字符串。
>>>import re
>>>string='Welcome to RegExr v2.1 by gskinner.com, proudly hosted by Media Temple!'
#匹配string中包含r'n{1,3}'(含'n'或'nn'或'nnn'的字符片段)
>>>print(re.findall(r'n{1,3}',string))
['nn']
5.6)re.compile可以把正则表达式编译成一个正则表达式对象 , 把那些经常使用的正则表达式编译成正则表达式对象,实现代码重用,提高效率。
>>>import re
#re.compile()返回RegexObject对象
>>>r1=re.compile('\.')
>>>print(re.split(r1, '192.168.10.0'))
['192', '168', '10', '0']