正则

作者: xiaohan_zhang | 来源:发表于2019-07-24 10:11 被阅读0次

    导入re模块
    import re
    使用match方法进行匹配操作
    result = re.match(正则表达式,要匹配的字符串)
    如果上一步匹配到数据的话,可以使用group方法来提取数据
    result.group()

    import re
    result = re.match("[hH]el", 'hello xiaobai')
    print(result.group())
    
    • 匹配单个字符
    参数 含义
    . 匹配任意1个字符(除了\n)
    [] 匹配[]中列举的字符串
    \d 匹配数字,即0-9
    \D 匹配非数字,即不是数字
    \s 匹配空白,即空格、tab键(用的比较少)
    \S 匹配非空白
    \w 匹配单词字符,即a-z、A-Z、0-9、_、中文字符(慎用这个)
    \W 匹配非单词字符
    • 匹配多个字符
    参数 含义
    * 匹配前一个字符出现0次或无限次,即可有可无
    + 匹配前一个字符出现1次或无限次,即至少有1次
    匹配前一个字符出现0次或1次,即至多1次
    {m} 匹配前一个字符出现m次
    {m,n} 匹配前一个字符出现m-n次
    • 匹配开头结尾
    参数 含义
    ^ 匹配字符串开头
    $ 匹配字符串结尾
    print(re.match(r".*a$", "dsa"))     # 以a结尾
    print(re.match(r"^a.*", "as"))      # 以a开头
    
    • 匹配分组
    参数 含义
    | 匹配左右任意一个表达式
    () 将()中字符作为一个分组
    \num 引用分组num匹配到的字符串
    (?P<name>) 分组起别名 (了解)
    (?P=name) 引用别名为name分组匹配到的字符串(了解)
    result = re.match(r"a(111|222)b", "a111b")   # a b 中间是111或222
    print(result.group())   # a111b
    print(result.group(1))  # 111
    result = re.match(r"(a)(111|222)b", "a111b")
    print(result.group(1))  # a
    print(re.match(r"[1-9]?\d$", "0"))
    # \1 表示取出第一个分组的匹配结果
    print(re.match(r"<(\w*)>.*</\1>", "<h1>hahhaah</h1>")) # 前后都是h1
    print(re.match(r"<(\w*)><(\w*)>.*</\2></\1>", "<body><h1>hahhaah</h1></body>"))
    
    print(re.match(r"<(?P<first>\w*)>.*</(?P=first)>", "<h1>hahhaah</h1>"))
    
    • re模块高级用法
    1. search
      search不会从头匹配,只要匹配到符合要求的数据的地方 就匹配到了
    ret = re.search(r"\d+", "阅读次数为 998 333")
    print(ret.group())  # 998
    
    1. findall
    ret = re.findall(r"\d+", "python = 9999, c = 3432, c++ = 23344")
    print(ret)  # ['9999', '3432', '23344']
    
    1. sub
      将匹配到的数据进行替换
    #方法一
    ret = re.sub(r"\d+", "998", "python = 888")
    print(ret)  # python = 998
    
    
    # 方法二
    def add(temp):
        strNum = temp.group()
        num = int(strNum) + 1
        return str(num)
    
    
    ret = re.sub(r"\d+", add, "python = 777")
    print(ret)  # python = 778
    
    1. splite
      根据匹配进行切割字符串,并返回一个列表
    ret = re.split(r":| ", "info:xiaoli 22 shandong")
    print(ret)  # ['info', 'xiaoli', '22', 'shandong']
    

    相关文章

      网友评论

          本文标题:正则

          本文链接:https://www.haomeiwen.com/subject/byptrctx.html