zoukankan      html  css  js  c++  java
  • python-网络安全编程第三天(正则表达式)

    python 正则表达式

    正则表达式本身是一种小型的、高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配。正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行。

    用法

    match()

    re.match()尝试从字符串的其实位置匹配一个模式匹配失败返回none
    语法:re.match(pattern,string,flags=00)
    pattern 匹配的正则表达式
    string 要匹配的字符串
    flags 标志位,控制正则表达式的匹配方式

    1 import re
    2 #在起始位置匹配
    3 print(re.match('www','www.baidu.com').span())
    4 #不再起始位匹配
    5 print(re.match('com','www.baidu.com'))

    group(num=0)匹配整个表达式的字符串
    groups() 返回一个包含所有小组字符串的元组

     1 #!/usr/bin/python
     2 import re
     3 line = "Cats are smarter than dogs"
     4 matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
     5 if matchObj:
     6    print "matchObj.group() : ", matchObj.group()
     7    print "matchObj.group(1) : ", matchObj.group(1)
     8    print "matchObj.group(2) : ", matchObj.group(2)
     9 else:
    10    print "No match!!

    re.search()

    re.search()方法扫描整个字符串并返回第一个成功的匹配
    函数语法:re.search(pattern,string,flags=0)
    剩下和上面的re.match用法一致

    re.match与re.search的区别
    re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

    compile()
    compile()编译正则表达式模式,返回一个对象模式
    格式:re.compile(pattern,flags=0)
    pattern:一个字符串形式的正则表达式
    flags:可选
    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 为了增加可读性,忽略空格和 # 后面的注释

    1 import re
    2 tt = "Tina is a good girl, she is cool, clever, and so on..."
    3 rr = re.compile(r'w*oow*')
    4 print(rr.findall(tt))   #查找所有包含'oo'的单词
    5 执行结果如下:
    6 ['good', 'cool']


    findall()
    re.findall遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表。
    格式:re.findall(pattern, string, flags=0)
    eg:

    1 import re
    2 p = re.compile(r'd+')
    3 print(p.findall('xiaohua2020jintian1yue9ri'))
    4 
    5 #执行结果:['2020', '1', '9']


    finditer()
    搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器。

    split()
    按照能够匹配的字串将string分割后返回列表
    格式:re.split(pattern,string[,maxsplit])
    eg:

    1 #按照/d+来匹配分割
    2 import re
    3 print(re.split('d+','xiaohuadawang123huahua2020 niubi'))
    4 #代码执行结果:['xiaohuadawang', 'huahua', ' niubi']

    sub()
    使用re替换string中每一个匹配的子串后返回替换后的字符串
    re.sub(pattern,repl,string,count)
    eg:

    1 #s+匹配 空格部分替换成-
    2 import re
    3 text="xiaohuadawang from yulinxueyuan xinxianquanxiehui"
    4 print(re.sub(r's+','-',text))
    5 #代码执行结果:
    6 #xiaohuadawang-from-yulinxueyuan-xinxianquanxiehui

    subn()
    返回替换次数
    格式:subn(pattern, repl, string, count=0, flags=0)

    正则表达式对象
    start()返回匹配开始的位置
    end返回匹配结束的位置
    span()返回一个元组包含匹配(开始,结束)的位置

    简单应用

    import requests
    import re
    
    url='http://jandan.net/pic/MjAyMDAxMjAtMTM4#comments'
    headers={}
    
    r=requests.get(url=url)
    
    imgs=re.findall('<img src="(.*?)" /></p>',r.content)
    
    print(imgs)
    for img in imgs:
        print(img)

    参考学习:
    https://www.cnblogs.com/tina-python/p/5508402.html
    https://www.runoob.com/python/python-reg-expressions.html

  • 相关阅读:
    一些精简的小技巧
    POJ题目分类(转)
    【慢慢学算法】:连通图
    【菜鸟做水题】: 杭电1004
    杭电ACM试题分类,一步一个脚印!(转)
    【慢慢学Android】:获得当前时间
    【慢慢学算法】:小白鼠排队
    【慢慢学Android】:12.Notification示例
    【慢慢学Android】:13.打电话代码
    “/”应用程序中的服务器错误。
  • 原文地址:https://www.cnblogs.com/xhds/p/12173950.html
Copyright © 2011-2022 走看看