- """
- 自 1.5 版本后, 引入 re 模块, 使 python 可以写正则表达式, 正则表达式是用来判断或者返回指定匹配模式的字符串:
- 比如说: 密码规则需要大小写字母和数字组成, 如果我们输入字符串来判断复合密码规则, 需要许多的判断语句,
- 而用正则表达式则可以很快的判断出这个字符串是否符合字符串的要求, 减少了代码的工作量
- python 正则表达式的实现需要引用 re 模块: import re
- re 模块的函数常用的有三个参数:
- pattern: 编写规则, 用来配对字符串是否符合规则:
- pattern = "pa" , 该规则为第一个字符为 p, 第二个字符的为 a 的字符串规则
- string: 要匹配的字符串
- flags: 标识符, 标志位, 用于控制正则表达式的匹配方式
- re.I 忽略大小写
- re.L 做本地户识别
- re.M 多行匹配, 影响 ^ 和 $ , 如果要匹配的字符串为多行, 需要赋这个值, 不然只会匹配该字符的第一行, 其他行不匹配
- re.S 是. 匹配包括换行符在内的所有字符
- re.U 根据 Unicode 字符集解析字符, 影响 \ W \W \b
- re.X 使我们以更灵活的格式理解正则表达式
- re.match(pattern,string,[flag]) 函数
- 功能: 从参数 string 字符串开始位置判断是否符合 pattern 规则, 是返回一个'_sre.SRE_Match'对象, 不是返回 None
- """
- import re
- patter1,patter2 = "www","wwW" #patter1 规则第一到第三位为 w,patter2 的规则从第一到第二为 w, 第三位为 W
- string1,string2,string3,string4 = "www.baidu.comwww","ww.baidu.com","wwww.baidu.com","baidu.com www"
- print(re.match(patter1,string1)) #返回对象 从 string1 的起始位置, 前三位都为 w, 与 patter1 的规则符合
- print(re.match(patter1,string2)) #返回 None 从 string2 的起始位置, 前三位为 ww. 与 patter1 的规则不符合
- print(re.match(patter1,string3)) #返回对象 从 string3 的起始位置, 前三位都为 w, 与 patter1 的规则符合
- print(re.match(patter1,string4)) #返回 None 从 string4 的起始位置, 前三位为 bai, 与 patter1 的规则不符合
- print(re.match(patter2,string1)) #返回 None 从 string1 的起始位置, 前三位都为 w, 与 patter2(前三位为 wwW)的规则不符合
- print(re.match(patter2,string1,re.I)) #返回对象 从 string1 的起始位置, 前三位都为 w, 与 patter2(前三位为 wwW)的规则不符合,
- # 但 flag 的参数为 re.I, 这个值是忽略大小写, 即可以将 patter2 的规则看成 www, 所以 string1 符合要求
- """
- re.search(pattern,string,[flag]) 函数
- 功能: 从 string 字符串中判断是否有包含 pattern 规则, 有返回对象, 没有返回 None
- """patter1,patter2 ="www","wwW"string1,string2,string3,string4 ="www.baidu.comwww","ww.baidu.com","wwww.baidu.com","baidu.com www"print("1==============================")
- print(re.search(patter1,string1)) #返回对象
- print(re.search(patter1,string4)) #返回对象
- print(re.search(patter2,string1,re.I)) #返回 None
- """
- re.findall(pattern,string,[flag]) 函数
- 功能: 从 string 字符串中是否有包含 pattern 规则, 有则返回能匹配 pattern 规则字符的列表, 没有返回空列表
- (可以知道这字符串可以有多少个匹配 pattern 规则的)
- """patter1,patter2 ="www","wwW"string1,string2,string3,string4 ="www.baidu.comwww","ww.baidu.com","wwww.baidu.com","baidu.com www"print("2--------------------------------")
- print(re.findall(patter1,string1)) #返回 ["www","www"] 列表
- print(re.findall(patter1,string2)) #返回 [] 列表
- R"""
- pattern 的单字符规则:
- . 匹配除换行符以外的任意字符
- ^ 脱字符, 表示不匹配集合的字符, 与字符集合搭配
- \d 匹配数字, 效果同[0-9]
- \D 匹配非数字字符, 效果同[^0-9]
- \w 匹配数字, 字母和下划线, 同[0-9a-zA-Z_]
- \W 匹配非数字, 字母和下划线, 同[^0-9a-zA-Z_]
- \s 匹配空白符(空格, 换行, 回车, 换页, 制表), 同[ \f\n\r\t]
- \S 匹配非空白符, 同[~ \f\n\r\t]
- [0123456789] []是字符集合, 表示匹配括号中所包含的任意一个字符, 该字符集合是匹配数字
- [a-z] 匹配任意小写字母
- [A-Z] 匹配任意大写字母
- [0-9a-zA-Z_] 匹配任意的数字, 字母和下划线
- """patter1,patter2 ="www","wwW"string1,string2,string3,string4 ="www.baidu.comwww","ww.baidu.com","wwww.baidu.com","baidu.com www"print("3+++++++++++++++++++++++++")
- print(re.search(".",string1)) #返回对象
- print(re.search("\d",string1)) #返回 None
- print(re.search("\w",string1)) #返回对象
- print(re.search("\s",string1)) #返回对象
- print(re.search("[0-9]",string1)) #返回 None
- R"""
- pattern(正则表达式)的锚字符 (即边界字符) 的规则,
- ^str 行首匹配, 和在 [] 里的 ^ 表示的不一样
- str$ 行尾匹配
- \Astr 匹配字符串开始位置 , 与 ^ 的区别是,^ 字符串为多行时, 返回每行首匹配,\A 是只匹配第一行的开头
- str\Z 匹配字符串结束, 与 $ 的区别是,$ 字符串为多行时, 返回每行尾匹配,\Z 是只匹配第一行的结尾
- str\b 匹配一个单词的边界
- str\B 匹配一个非单词的边界
- """print("4+++++++++++++++++++++++++")
- patter1,patter2 = "www","wwW"
- string1,string2,string3,string4 = "www.baidu.comwww","ww.baidu.com","wwww.baidu.com","baidu.com www"
- print(re.search("^www",string3)) #返回对象
- print(re.search("^www",string2)) #返回 None
- print(re.search("com$",string2)) #返回对象
- string5 = "www.hjlin.com\nwww.baidu.com"
- print(re.findall("^www",string5)) #返回["www"]
- print(re.findall("^www",string5,re.M)) #返回["www","www"]
- print(re.findall(r"\Awww",string5)) #返回["www"]
- print(re.findall(r"\Awww",string5,re.M)) #返回["www"]
- print(re.findall("com$",string5)) #返回["com"]
- print(re.findall("com$",string5,re.M)) #返回["com","com"]
- print(re.findall(r"com\Z",string5)) #返回["com"]
- print(re.findall(r"com\Z",string5,re.M)) #返回["com"]
- print(re.search(r"er\b","ever")) #返回对象
- print(re.search(r"er\b","everst")) #返回 None
- print(re.search(r"er\B","ever")) #返回对象
- print(re.search(r"er\B","everst")) #返回 None
- R"""
- 正则表达式 指定多个字符串为规则
- str 以 str 为整体去匹配
- str? 以 0 个或者 1 个 str 为整体去匹配
- str1|str2 以 str1 或者 str2 为整体去匹配
- # 以下 str, 只能为单个字符, 若 str 是多个字符组成的字符串, 效果会于结果不一致或返回 None(空列表)
- str* 以多个 str 为整体去匹配
- str+ 以至少一个 str 为整体去匹配
- str{int} 以 int 个 str 为整体去匹配
- str{int,} 以至少 int 个 str 为整体去匹配
- str{int,int1} 以至少 int 个, 最多 int1 个 str 为整体去匹配
- """print("5+++++++++++++++++++++++++++++")
- print(re.findall("hjl","hjl hjl hjl")) #返回["hjl","hjl","hjl"]
- print(re.findall("hjl","h j l h j l h j l")) #返回[]
- print(re.findall("hjl?","hjl hjl hjl")) #返回["hjl","hjl","hjl"], 因为 hjl 不为一个字符的字符串, 因此导致结果于 hjl 的规则一致
- print(re.findall("hjl?","hjlhjlhjl")) #返回["hjl","hjl","hjl"], 因为 hjl 不为一个字符的字符串, 因此导致结果于 hjl 的规则一致
- print(re.findall("a?","aaa")) #返回["a","a","a",""]
- print(re.findall("a","aaa")) #返回["a","a","a"]
- print(re.findall("a*","abaabbaaabbbaaaabbbb")) #返回["a","","aa","","","aaa","","","","aaaa","","","",""]
- print(re.findall("hjl*","hjlhjlhjl")) #返回["hjl","hjl","hjl"]
- print(re.findall("a+","abaabbaaabbbaaaabbbb")) #返回["a","aa","aaa","aaaa"]
- print(re.findall("hjl+","hjlbhjlhjlbbhjlhjlhjlbbbhjlhjlhjlhjlbbbb")) #返回["hjl","hjl","hjl","hjl","hjl","hjl","hjl","hjl","hjl","hjl"]
- print(re.findall("a{2}","abaabbaaabbbaaaabbbb")) #返回["aa","aa","aa","aa"]
- print(re.findall("hjl{2}","hjlbhjlhjlbbhjlhjlhjlbbbhjlhjlhjlhjlbbbb")) #返回[]
- print(re.findall("a{2,}","abaabbaaabbbaaaabbbb")) #返回["aa","aaa","aaa"]
- print(re.findall("hjl{2,}","hjlbhjlhjlbbhjlhjlhjlbbbhjlhjlhjlhjlbbbb")) #返回[]
- print(re.findall("a{2,3}","abaabbaaabbbaaaabbbb")) #返回["aa","aaa","aaa"]
- print(re.findall("hjl{2,3}","hjlbhjlhjlbbhjlhjlhjlbbbhjlhjlhjlhjlbbbb")) #返回[]
- print(re.findall("hjl|hjj" , "hjlbhjj")) #返回["hjl","hjj"]
- print(re.findall("h|j","hjl")) #返回["h","j"]
- str="hjl is a man!hjl is a good man!hjl is a very good man"
- print(re.findall(r"hjl.*man",str)) #返回["hjl is a man !hjl is a good man !hjl is a very good man"]
- print(re.findall(r"hjl.*?man",str)) #返回["hjl is a man","hjl is a good man","hjl is a very good man"]
- # 针对上述的两句正则进行说明: 第一个规则为以 开头前三个为 hjl, 最后的三个为 man, 中间是除换行符之外的任意字符, 可以有多个
- # 第二个规则, 再第一个规则的基础上, 规定了开头和中间的部分为一个整体去匹配, 即当程序遇到了第二个 hjl, 后面的内容和中间部分匹配, 算第二个整体.
来源: http://www.bubuko.com/infodetail-3012910.html