首页 > 编程语言 > 详细

Python——正则表达式

时间:2020-06-11 11:41:10      阅读:47      评论:0      收藏:0      [点我收藏+]

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就停止。关键在于?,这里的问号在量词后面就表示非贪婪匹配。

Python——正则表达式

原文:https://www.cnblogs.com/xinbing/p/13091712.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!