re模块与正则表达式的关系:
就像time模块与时间的关系,time只能使用时间而不能改变时间。re模块也只能使用正则表达式和正则表达式本身是没有关系的。
正则表达式:
1. 是一种匹配字符串的规则。
2. 匹配字符串:电话,身份证,IP地址
3. 表单验证:登录,注册时发送短信,进行输入号码的比较。
4. 爬虫:从网页源码中获取一些链接,重要数据等。·
正则表达式规则:
1. 本身是哪个字符,就匹配字符串中的哪个字符,除特殊字符外。
2. 字符组:[字符字符] 如:[0-9]
注:
1. 一个字符组只能匹配一个字符,当匹配多个时,是放到多个匹配组中的,而不是放在同一个匹配组中。而如果想放在同一个匹配组中,那么就要建多个字符组。
2. 都只能从小到大做匹配[1-9]而不能[9-1],因为要遵循ascii码中的序列来。常用字符组:[a-zA-Z]大小写字母,[a-zA-Z0-9]任意数字加大小写字母。
常用的正则表达元字符:
‘.‘ 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行 ‘^‘ 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE) ‘$‘ 匹配字符结尾,是必须某一个字符串做结尾。或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以 ‘|‘ 匹配|左或|右的字符,如果两个规则有重叠部分,将长的在前面,短的在后面。,re.search("abc|ABC","ABCBabcCD").group() 结果‘ABC‘ ‘\‘ 转意的意思。re.search(‘(abc){2}(\|\|=){2}‘,‘xuanabcabc||=||=‘) 结果abcabc||=||= ‘(...)‘ 分组匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 结果 abcabca456c
‘()‘ 表示分组,给一部分正则规定为一组,|或的符号作用域就可以缩小了。 ‘[]‘ 字符组 ‘[a-zA-Z]‘ 匹配某一段字符串中的所有大小写字母。re.search("Y[a-zA-Z]+n","Xuan123Yongjun321") 结果 Yongjun [xyz] 字符集合。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。 [^xyz] 负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”。 ‘\A‘ 只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的 ‘\Z‘ 匹配字符结尾,同$ ‘\d‘ (digit)匹配数字0-9 ‘\D‘ 匹配非数字,包括特殊字符 ‘\w‘ (word)匹配数字,字母,下划线。 ‘\W‘ 匹配非数字,字母,下划线。 ‘\s‘ (space)匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 ‘\t‘ ‘\t‘ (table)制表符 ‘\n‘ (next)换行符 ‘(?P<name>...)‘ 分组匹配 re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city") 结果{‘province‘: ‘3714‘, ‘city‘: ‘81‘, ‘birthday‘: ‘1993‘} 可以将值取出并以字典的形式列出。name为key,得出的值为value
常用量词
‘*‘ 匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac") 结果为[‘abb‘, ‘ab‘, ‘a‘]
‘+‘ 匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果[‘ab‘, ‘abb‘]
‘?‘ 匹配前一个字符1次或0次,0的意思是匹配的字符中有一个数可有可无。‘aal?’ 表示l可有可无的意思~
‘{m}‘ 匹配前一个字符m次,re.search("[0-9](3)","A4BC5Bab123").group() 结果‘123‘
‘{n,m}‘ 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果‘abb‘, ‘ab‘, ‘abb‘]
贪婪匹配:
总是会在符合量词条件的范围内尽量多匹配。默认为贪婪模式。
非贪婪匹配:
总是匹配符合条件范围内尽量小的字符串。
.*?x :表示按照元字符规定在量词范围内匹配,一旦遇到x就停止。关键在于?,这里的问号在量词后面就表示非贪婪匹配。
原文:https://www.cnblogs.com/xinbing/p/13091712.html