zoukankan      html  css  js  c++  java
  • Python基础之正则表达式

    正则表达式用过不少,但是好像还没整理过,今天稍稍整理了一下,也不是很完全,几个基本的功能应该够用了。

    一、匹配字符串,判断是否匹配成功

    二、匹配字符串,获取全部匹配结果,结果呈现是一个列表

    三、匹配字符串,获取全部匹配结果以及相应的位置

    正则.py

    #!/usr/bin/env python
    # _*_ coding: UTF-8 _*_
    """=================================================
    @Project -> File    : Operate-system -> play.py
    @IDE     : PyCharm
    @Author  : zihan
    @Date    : 2020/4/23 14:45
    @Desc    :
    ================================================="""
    
    import re
    
    
    def notes():
        print(
            """
            匹配单个字符:
            .   匹配任意字符(除了
    ) 备注:如果想要匹配到.的话,那么用.可以匹配
            []  匹配[]中列举的数据
            d  匹配数字0-9
            D  匹配非数字
            s  匹配空白:空格 tab
            S  非空白
            w  匹配单词字符 a-z A-Z 0-9 _
            W  匹配非单词字符
            
            匹配多个字符:
            *       匹配前面字符出现0次或者无数次
            +       匹配前面字符出现1次或者无数次 至少有一次
            ?       匹配前面字符出现1次或者0次 至多有一次
            {n}     匹配前面出现的字符n次
            {m, n}  匹配前面出现的字符m次到n次,尽可能多匹配
            
            匹配开头 结尾
            ^   匹配字符串开头
            $   匹配字符串结尾
            """
              )
    
    
    # 展示匹配结果,打印的是匹配到的字符或者None
    def show_result_match(res, order):
        if res is None:
            print(str(order) + ". " + "匹配失败哦。。。")
        else:
            result = res.group()
            print(str(order) + ". ", end="")
            print(result)
    
    
    # 匹配单个字符,从第一个字符开始匹配
    def one_test_match():
        # 匹配第一个字符
        str1 = "3123452236712389"
        res = re.match(".", str1)
        show_result_match(res, 1)
        res = re.match("[1,2,3]", str1)
        show_result_match(res, 2)
        res = re.match("d", str1)
        show_result_match(res, 3)
        res = re.match("D", str1)
        show_result_match(res, 4)
        res = re.match("s", str1)
        show_result_match(res, 5)
        res = re.match("S", str1)
        show_result_match(res, 6)
        res = re.match("w", str1)
        show_result_match(res, 7)
        res = re.match("W", str1)
        show_result_match(res, 8)
    
    
    # 匹配多个字符,从第一个字符开始匹配
    def more_test_match():
        """
        cmp = re.compile(str1)
        res = cmp.match(str2)
        等价于
        res = re.match(str1, str2)
    
        """
        str2 = "1234567890m"
        res = re.match("d*", str2)
        show_result_match(res, 1)
        res = re.match("d+", str2)
        show_result_match(res, 2)
        res = re.match("d?", str2)
        show_result_match(res, 3)
        res = re.match("d{10}", str2)
        show_result_match(res, 4)
        res = re.match("d{6,11}", str2)
        show_result_match(res, 5)
    
        # 开头 结尾
        res = re.match("^sd", str2)
        show_result_match(res, 6)
        res = re.match("^[a-z, A-Z]d+", str2)
        show_result_match(res, 7)
        res = re.match("^[a-z, A-Z]d+m$", str2)
        show_result_match(res, 8)
    
    
    # 找出所有符合匹配条件的值,返回的是一个列表
    def more_test_findall():
        str2 = "a123b456c123d345"
        res = re.findall("d+", str2)
        print(res)
    
    
    # 扫描整个string并返回第一个匹配对象,如果没有匹配对象,返回None
    def more_test_search():
        str2 = "a123b456c123d345"
        res = re.search("d+", str2)
        cmp = re.compile("d+")
        # 第二个参数给出了字符串开始搜索的位置索引,默认是0,5代表从第5个字符开始搜索
        # 第三个参数限定了字符串搜索的结束,7表示搜索到第7个字符结束
        res1 = cmp.search(str2, 5, 7)
        print(res[0])
        print(res1[0])
    
    
    def more_test_finditer():
        text = "He was carefully disguised but captured quickly by police."
        for m in re.finditer(r"w+ly", text):
            print("%02d-%02d: %s" % (m.start(), m.end(), m.group(0)))
    
    
    def main():
        more_test_finditer()
        # more_test_search()
        # more_test_findall()
        # more_test_match()
        # one_test()
    
    
    if __name__ == '__main__':
        main()

     以上是一些简单的正则匹配,其他的基本是这些的组合,看上去比较复杂,拆分开来就好了。以后有时间,拆分几个看看。

    ok

  • 相关阅读:
    线程 定时任务 实现思路
    Days Floating In ShenZhen(1)
    由于未能找到具有自动生成的控件来引发回发事件,导致发生错误
    在ASP.NET中使用AJAX.NET (转译自MSDN)(二)
    Every Time I Wake up I want sleep more
    漂泊在深圳的日子2
    512今日历程
    流金岁月
    对自己的思考
    关于绑定自动生成的下拉式菜单的错误
  • 原文地址:https://www.cnblogs.com/smart-zihan/p/12761919.html
Copyright © 2011-2022 走看看