经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 其他 » 正则表达式 » 查看文章
python正则表达式的使用(实验代码)
来源:jb51  时间:2019/6/28 10:19:26  对本文有异议

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。
re 模块使 Python 语言拥有全部的正则表达式功能。
compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。

re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。

python正则表达式的使用(实验代码),具体代码如下所示:

  1. import re
  2. data='''12345 2019-05-20 13:30:04,102 E:/PythonProject/accountReport-20190520/createReport_20190520.py(164): [INFO]start=24h-ago&m=sum:zscore.keys{compared=week,redis=6380,endpoint=192.168.8.11_Redis-b}
  3. 2019-05-20 13:30:04,133 E:/PythonProject/accountReport-20190520/createReport_20190520.py(164): [INFO]start=24h-ago&m=sum:keys{redis=6380,endpoint=192.168.8.120_Redis-sac-a}
  4. '''
  5. # 1.1)非编译正则表达式的使用
  6. def re_nocompile():
  7. pattern="report" #匹配时间格式
  8. r=re.findall(pattern,data,flags=re.IGNORECASE) # findall方法 返回字符串
  9. print(r)
  10. # 1.2) 编译的正则表达式的使用(效率高)
  11. def re_compile():
  12. pattern = "[0-9]{1,2}\:[0-9]{1,2}\:[0-9]{1,2}" # 匹配时间格式
  13. re_obj=re.compile(pattern) #创建一个对象
  14. r=re_obj.findall(data) # findall方法 返回字符串
  15. print(r)
  16. # 2.1)“匹配” 类函数的使用 findall、 match、search、finditer
  17. def re_match():
  18. pattern = "\d+" # 匹配数字
  19. r=re.match(pattern,data) #match 函数是匹配字符串的开头,类似startwith
  20. if r: # 使用match匹配成功后,返回SRE_MATCH类型的对象,该对象包含了相关模式和原始字符串,包括起始位置和结束位置
  21. print(r)
  22. print(r.start())
  23. print(r.end())
  24. print(r.string)
  25. print(r.group()) # group()用来提出分组截获的字符串。group() 同group(0)就是匹配正则表达式整体结果。
  26. # group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。
  27. # 当然正则表达式中没有括号,group(1)肯定不对了
  28. print(r.re)
  29. else: # match如果匹配不到,返回None
  30. print("False")
  31. def re_search():
  32. pattern = "[0-9]{1,2}\:[0-9]{1,2}\:[0-9]{1,2}" # 匹配时间格式
  33. r=re.search(pattern,data) # search方法是全部位置的匹配,返回SRE_MATCH对象
  34. print(r)
  35. print(r.start()) #起始位置
  36. print(r.end()) #结束位置
  37. # finditer返回一个迭代器
  38. def re_finditer():
  39. pattern = "\d+" # 匹配数字
  40. r=re.finditer(pattern,data)
  41. for i in r:
  42. print(i.group())
  43. # 贪婪匹配:总是匹配最长的那个字符串(默认)
  44. # 非贪婪匹配:总是匹配最短的那个字符串(在匹配字符串时加上?来实现)
  45. def re_find02():
  46. r1=re.findall("Python.*\.",data) # 贪婪匹配
  47. print(r1)
  48. r2 = re.findall("Python.*?\.", data) #非贪婪匹配
  49. print(r2)
  50. if __name__=="__main__":
  51. re_nocompile()
  52. re_compile()
  53. re_match()
  54. re_search()
  55. re_finditer()
  56. re_find02()
  57. import re
  58. import requests
  59. data='''12345 2019-05-20 13:30:04,102 E:/PythonProject/accountReport-20190520/createReport_20190520.py(164): [INFO]start=24h-ago&m=sum:zscore.keys{compared=week,redis=6380,endpoint=192.168.8.11_Redis-b}
  60. 2019-05-20 13:30:04,133 E:/PythonProject/accountReport-20190520/createReport_20190520.py(164): [INFO]start=24h-ago&m=sum:keys{redis=6380,endpoint=192.168.8.120_Redis-sac-a}
  61. '''
  62. # 1)“修改类”函数
  63. # 1.1) sub函数进行匹配并替换,返回替换后的字符串
  64. def re_sub():
  65. pattern = "[0-9]{1,2}\:[0-9]{1,2}\:[0-9]{1,2}" # 匹配时间格式
  66. data01=re.sub(pattern,"timeString",data)
  67. print(data01)
  68. # 1.2)splite将字符串拆成子串列表,可以同时指定多个分隔符
  69. def re_split():
  70. r=re.split(r"[:\-\=]",data.strip("'"))
  71. print(r)
  72. # 2)匹配html的一个例子
  73. def re_html():
  74. r=requests.get("https://www.hao123.com/")
  75. print(r.content)
  76. try:
  77. web=re.findall("(https:.*?.com)",str(r.content))
  78. print(web)
  79. except Exception as err:
  80. print(err)
  81. if __name__=="__main__":
  82. re_sub()
  83. re_split()
  84. re_html()

总结

以上所述是小编给大家介绍的python正则表达式的使用(实验代码),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对w3xue网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号