马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
正则就是字符串处置处罚的瑞士军刀
之前我们是通过if判定来匹配某个字符串,不机动,太枯燥了
手机号码匹配,就是有些网站是通过手机号登录的,就是通过这个正则来实现的
电子邮件等应用场景
利用正则就必须利用这个re模块,内置模块,直接导入,不必要下载
re模块焦点的函数
1、re.findall(pattern,string,flags=0)
功能:在整个字符串中查找全部匹配项,返回列表(包罗全部匹配效果)
场景:批量提取文本中的目的内容(如全部邮箱、全部数字)
参数详解:
- pattern 就是匹配的内容,要找的这个内容
- string 匹配的对象,就是从这个对象内里找我必要的内容,必须是字符串
- import re
- s1 = "pythonqwerpython"
- result = re.findall("python",s1)
- print(result)
- # 输出结果为,返回的是一个列表
- ['python', 'python']
- # 匹配失败,返回的是一个空列表
- result = re.findall("qc",s1)
- print(result)
- # 输出结果为
- []
复制代码 2、re.match(pattern,string,flags=0)
功能:从字符串开头匹配正则表达式,仅返回第一个效果
- 只会从最开头开启匹配,只管最前面,匹配的内容在中心也会匹配失败,必须在开头
返回值:匹配乐成返回的是一个match对象,失败返回none
match对象常用的方法:
- span(): 返回匹配的起始和竣事的索引,也就是匹配到第一个的切片(元组:(start,end))
- group(): 返回匹配的整个字符串,就是返回匹配的内容
- groups(n): 返回第n个分组的内容(n从1开始)
- s2 = "pythonqwerpython"
- result = re.match("python",s2)
- print(result)
- # 返回的是一个对象
- <re.Match object; span=(0, 6), match='python'>
- print(result.span())
- # 返回第一个匹配到内容的切片
- (0,6)
- print(result.group())
- # 返回匹配到的内容
- python
- # match是从开头就开始匹配的,非常精确的匹配
- s2 = "qwerpython"
- result = re.match("python",s2)
- print(result)
- # 输出结果为,没有匹配到,从开头就开始匹配了
- None
复制代码 3、re.search(pattern,string,flags=0)
功能:在整个字符串查找第一个匹配项(不限定开头了)
返回值:也是返回一个匹配对象,
区别match, match仅匹配开头,search匹配恣意位置,就是重新匹配到尾
方法:
- s4 = "pythonqwertpython"
- print(re.search("python",s4))
- # 返回一个对象
- <re.Match object; span=(0, 6), match='python'>
- print(re.search("python",s4).group())
- # 返回第一个匹配的到的内容
- # 和match最不同的方式,从头开始匹配到尾,输出第一次匹配到的内容
- s5 = "qwerpython"
- print(re.search("python",s5).group())
- # 输出结果为
- python
复制代码 上面匹配的内容都是写死的,因此我们必要利用正则来实现这个机动性
元字符和量词
元字符是正则表达式的语法符号,量词用于控制字符重复次数,联合利用
寻常字符(直接匹配)
字母、数字,下划线等寻常字符,直接匹配本身
示例;"abc" 匹配 字符串中的"abc", 123 匹配 123, "_" 匹配 "_"
焦点特殊元字符(必要把握)
元字符
查什么,就是匹配的内容
元字符寄义示例.匹配恣意单个字符(除了换行符\n)"a.b"匹配aab,a和b之间恣意字符都匹配^匹配字符串开头^abc匹配abc123,不匹配xabc$匹配字符串末了的n$ 匹配字符串末了是n的[]匹配括号内里恣意一个字符,支持范围[a-z],清除[^a-z]"[abc]"匹配a,b,c三个字符[^]否定字符集,匹配括号外的恣意字符[^abc] 匹配除了a/b/c外的字符()分组:将括号内内容视为团体,可用于提取子串、反向引用"(ab)+" 匹配 "ab"/"abab";"(a)(b)" 可通过 \1/\2 引用|或:匹配左右恣意一个表达式(优先级较低,需共同分组利用)"a|b" 匹配 "a"/"b";"(ab)|(cd)" 匹配 "ab"/"cd"\转义字符:将特殊字符转为寻常字符(如 \. 匹配 .)"\." 匹配 ".";"\*" 匹配 "*";"\\n" 匹配换行符\d等价于[0-9],匹配恣意数字\d+ 提取字符串中全部数字\D等价于[^0-9]匹配非数字\D+ 提权字符串非数字字符内容\s等价于[\t\n\r\f] 匹配看=空缺字符(空格,制表符,换行等)\s匹配字符串中的空格\S等价于[^\t\n\t\f] 匹配非空缺字符\S 匹配非空缺字符\w等价于[a-zA-Z0-9_] 匹配字母,数字,下划线\w+ 匹配单词(含下划线)\b-匹配单词界限(单词与非单词的分隔)\B-匹配非单词界限元字符案例
- p1 = "abcdefgqwer"
- print(re.findall(".",p1)) # 在整个字符串中匹配任意的单个字符,也就是全部匹配到了
- # 返回结果为
- ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'q', 'w', 'e', 'r']
复制代码 量词(控制重复次数)
量词
查多少次
体现匹配前一个字符出现的次数的控制,支持贪婪和非贪婪模式,是正则的焦点特性之一
元字符和量词共同利用,效果最佳
默认全部量词都是贪婪,但是量词反面加上一个? 就黑白贪婪,拿到第一个立刻停,绝不多拿
量词范例语法贪婪/非贪婪寄义示例(匹配 a)零次或多次*贪婪重复 0 次或多次(优先最多)a* 匹配 ""/"a"/"aaa"零次或多次*?非贪婪重复 0 次或多次(优先最少)a*? 优先匹配 ""一次或多次+贪婪重复 1 次或多次(优先最多)a+ 匹配 "a"/"aaa"一次或多次+?非贪婪重复 1 次或多次(优先最少)a+? 优先匹配 "a"零次或一次?贪婪重复 0 次或 1 次(优先 1 次)a? 匹配 ""/"a"零次或一次??非贪婪重复 0 次或 1 次(优先 0 次)a?? 优先匹配 ""精确次数{n}无(固定)必须重复 n 次a{3} 匹配 "aaa"范围次数{m,n}贪婪重复 m~n 次(优先 n 次)a{2,4} 匹配 "aa"/"aaa"/"aaaa"范围次数{m,n}?非贪婪重复 m~n 次(优先 m 次)a{2,4}? 优先匹配 "aa"最少次数{m,}贪婪至少重复 m 次(无上限,优先最多)a{2,} 匹配 "aa"/"aaa"…最多次数{,n}贪婪最多重复 n 次(0~n 次,优先 n 次)a{,3} 匹配 ""/"a"/"aaa"量词实战
重要就是这些符号的相识,符号的实战
r焦点作用就是让字符串里的\体现寻常字符,不被当成转义字符
r"\n"
分组
总结
re模块函数总结
re.findall 在整个字符串找到全部匹配的内容,返回一个列表
re.search 在整个字符串找到第一次匹配的内容,返回一个匹配的对象
re.match 重新就开始匹配,不符合就返回none,匹配乐成绩返回匹配的对象
|