import re
Python语言默认是贪婪的,但其他语言并不一定是贪婪的 # 想要得到正则匹配后的值需要用 group()获取,但是一定要判断是否取到值,否则会抛异常如果有多个()的话,需要用group(n)来取值 ***** # 在有固定长度的的表达式匹配时,一定要加开始和结尾的标识符 ***** # 所有的量词都要用在正则规则匹配的后面 ***** # [a-z]d+ ->a123456889...... # [a-z]+d+ ->fdaf...1245687665... """ re.I 忽略大小写 re.L 表示特殊字符集 w, W, , B, s, S 依赖于当前环境 re.M 多行模式 re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符) re.U 表示特殊字符集 w, W, , B, d, D, s, S 依赖于 Unicode 字符属性数据库 re.X 为了增加可读性,忽略空格和 # 后面的注释 """ result = "AB1253C45b67 89a5 dsflghjkl" # re.match(r"regular expression ","需要匹配的内容") #从左到右匹配只取第一个相当与 '^'
print(re.match(r".*", result,re.S)) #S 忽略
print(re.match(r"[A-z]+", result))
print(re.match(r"[0-9]", result)) # re.findall(r"regular expression","需要匹配的内容") #从头到尾都匹配只要匹配到,返回一个列表 print(re.findall(r".", result))
print(re.findall(r"[a-z]",result,re.IGNORECASE))
print(re.findall(r"[0-9]",result)) # re.search 扫描整个字符串并返回第一个成功的匹配 # re.search(r"regular expression","需要匹配的内容") #能够匹配包含xxx的字符串 左闭右开下标从0开始
ret = re.search(r"d+", "阅读次数为 9999") #.group()取数据
print(ret)print(re.search(r".+", result))
print(re.search(r"[a-z]+", result))
print(re.search(r"d+", result)) # re.sub() #将匹配到的数据进行替换 ret = re.sub(r"d+", '998', "python = 997")
print(ret) # def add(temp):
count_num = temp.group()
result = int(count_num) + 1
return str(result)
ret1 = re.sub(r"d+", add, "python = 900")
ret2 = re.sub(r"d+", add, "python = 99")
print(ret1)
print(ret2) # eg: str = """ <div> <p>岗位职责:</p> <p>完成推荐算法、数据统计、接口、后台等服务器端相关工作</p> <p><br></p> <p>必备要求:</p> <p>良好的自我驱动力和职业素养,工作积极主动、结果导向</p> <p> <br></p> <p>技术要求:</p> <p>1、一年以上 Python 开发经验,掌握面向对象分析和设计,了解设计模式</p> <p>2、掌握HTTP协议,熟悉MVC、MVVM等概念以及相关WEB开发框架</p> <p>3、掌握关系数据库开发设计,掌握 SQL,熟练使用 MySQL/PostgreSQL 中的一种<br></p> <p>4、掌握NoSQL、MQ,熟练使用对应技术解决方案</p> <p>5、熟悉 Javascript/CSS/HTML5,JQuery、React、Vue.js</p> <p> <br></p> <p>加分项:</p> <p>大数据,数理统计,机器学习,sklearn,高性能,大并发。</p> </div> """ #data = re.sub(r"<[^>]*>| | ",'',str)
data = re.sub(r"<[^>]+>| | ","",str)
print(data) # re.split() #根据匹配进行切割字符串,并返回一个列表
ret = re.split(r":| ","info:xiaoZhang 33 shandong")
print(ret) # "."能匹配' '以外的所有字符 str1 = "a12345 6879. b" print(re.match(r"^.*", str1)) # "d" digit 匹配数字 print(re.match(r"^d", "12ad34")) # "w" word 能匹配单词字符和汉字 print(re.match(r"^w", "一起去看看")) # "s" space 匹配任意的空白符 print(re.match(r"^s*", " -b 12")) # "D" 匹配非数字 # "W" 能匹配非单词字符 # "S" 匹配非任意的空白符 # " " 匹配换行符 # " " 匹配制表符 # "" 匹配单词的结尾 # "^" 匹配开头 ->startwith 和"$"匹配结尾 ->endwith # "a|b" 或匹配 print(re.match(r"(db|abc)*", "abcdb")) # "()" 匹配括号内的表达式,俗称分组,需要对一个字符串进行整体讨论时,一般用分组 # "[ ]" 一个字符组只能匹配一个位置 # [^a-z] 除a-z的都匹配 # 量词 --> 坐标轴记忆法 # "*" 匹配0次或多次 贪婪匹配 # "+" 匹配1次或多次 贪婪匹配 # "?" 匹配0次或1次 非贪婪匹配 "^[0~9]{14}(d{2}[0-9x])$" # "{n}" 重复n次 # "{n,}" 重复n次到无穷大 # "{m,n}" 重复m到n次(个)
#匹配标识符
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import re # 注意需求 一字一字看,认真看 # 匹配标识符 def main(): all_str = ["args", "kwargs", "__nest__", "enumerate#%&", "yield1", "#12", "apply_async", "join", "join&", "1iter"] for str in all_str: # result = re.match(r"^[A-z_][A-z0-9_]*", str) result = re.match(r"^[A-z_][A-z0-9_]*$", str) if result: print("该变量%s符合变量的命名规则,通过正则匹配出来的结果是%s" % (str, result.group())) else: print("该变量%s不符合变量的命名规则" % (str)) if __name__ == '__main__': main()
#简单匹配163邮箱
#万能匹配邮箱正则表达式
/^[a-z0-9][w.-]*@[a-z0-9-]+(.[a-z]{2,5}){1,2}$/;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 匹配邮箱 def main(): content_email = input("请输入邮箱账号:") ret = re.match(r"^[A-z0-9_]+@163.com",content_email) if ret: print("这个邮箱账号%s符合当前需求",content_email) else: print("这个邮箱账号%s不符合我们的需求",content_email) if __name__ == '__main__': main()
#匹配手机号
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 总长11位,首号必须为1,尾号不能是4/7 # 匹配手机号 def main(): result = input("请输入一个手机号:") # ret = re.match(r"^[1]d{9}[0-35689]$", result) # ret = re.match(r"^[1]d{9}[^4]|[^7]$",result) # ret = re.match(r"^[1]d{9}[^4]$|^[1]d{9}[^7]$",result) # ret = re.match(r"^1[0123456789]{9}[0-35689]$", resrult) ret = re.match(r"^[1]d{9}([^4]|[^7])$", result) if ret: print("该手机号%s符合要求", result) else: print("该手机号%s不符合要求", result) if __name__ == '__main__': main(