• 第二十三天- 模块 re


    # 1. 正则表达式
    # 元字符
    # . 除了换行符外任意字符
    # w 数字 字母 下划线
    # s 空白符
    #  单词的末尾
    # d 数字
    # W 除了数字 字母 下划线
    # D 除了数字
    # S 除了空白符
    # ^ 开头
    # $ 结尾
    # [] 匹配字符组中的字符
    # [^] 除了字符组内的元素外

    # 量词 限定符
    # * {0,n} 零或者更多
    # + {1,n} 一或更多
    # ? {0,1} 零或一
    # {p} p次
    # {p,}   p次或更多次
    # {p,q} 从p到q次

    # .*   贪婪匹配 尽可能多的匹配到结果
    # .+

    # .*? 惰性匹配 是尽可能的少匹配.


    # 分组 正则中使⽤()进⾏分组. 如.匹配⼀个相对复杂的⾝份证号
    # ^[1-9]d{14}(d{2}[0-9x])?$
    # ^([1-9]d{16}[0-9x]|[1-9]d{14})$

    # 转义
    # 正则表达式中,有很多有特殊意义的是元字符,如 和s等,若要在正则中匹配正常的" "⽽不是"换⾏符"需要对""进⾏转义, 变成'\'.
    # 而在python中,都是字符串的形式出现,字符串中也有特殊的含义,本身还需转义.所以匹配⼀次" ",字符串中要写成'\n',那么正则就要写成"\\n",
    # 这样太麻烦.所以这时用r' '这个概念,此时的正则是r'\n'就可以了.
    # 如 r"www.(baidu|google).com","www.google.com"
    # 
     换行
    # \n
    # .
    # /
    # ?



    # 2. re模块
    # findall() 获取到匹配的所有内容
    # finditer() 匹配到所有内容。 返回迭代器
    # search() 搜索。查到了就返回
    # match() 匹配. 从头开始匹配
     1 # r"(?P<name>正则)"
     2 
     3 import re
     4 res = re.search('e','leiyunse') # 搜索 搜到 一个 结果就返回
     5 print(res.group())  # e
     6 
     7 res = re.match('w+','wuwu is not good man')  # match 从开头匹配 若匹配到了就返回
     8 print(res.group())  # wuwu
     9 
    10 lst = re.findall('w+','wusir and exo')  # findall 查找所有 返回list
    11 print(lst)  # ['wusir', 'and', 'exo']
    12 
    13 it = re.finditer("w+","mai le fo leng")  # 返回迭代器
    14 for el in it:
    15     print(el.group())
    16     '''
    17      mai
    18     le
    19     fo
    20     leng
    21     '''
    22 
    23 # 分组优先级
    24 lst = re.findall(r"www.(baidu|google).com","www.google.com")  # ()最优先返回
    25 print(lst)  # ['google']
    26 
    27 # (?:) 去掉优先级
    28 lst = re.findall(r"www.(?:baidu|google).com","www.google.com")
    29 print(lst)  # ['www.google.com']
    30 
    31 # split 切割 若加括号()会保留切的
    32 lst = re.split("([ab])","alex is not a sb,no he is a big sb")
    33 print(lst)
    34 
    35 # sub 替换
    36 res = re.sub(r"d+","_sb_","alex111wusir222taibai666ritian999")
    37 print(res)  # alex_sb_wusir_sb_taibai_sb_ritian_sb_
    38 
    39 # subn 替换 返回元组 带替换次数
    40 res = re.subn(r"d+","_sb_","alex111wusir222taibai666ritian999")
    41 print(res)
    42 
    43 # re.compile() # 把正则表达式预加载
    44 obj = re.compile(r"alexd+and")
    45 res = obj.search("alex222andwusir333taibai666ritian999")
    46 print(res.group())  # alex222and
    47 # 若数字单独拿出来
    48 obj = re.compile(r"alex(?P<name>d+)and")
    49 res = obj.search("alex222andwusir333taibai666ritian999")
    50 print(res.group())  # alex222and
    51 print(res.group("name"))  # 222
    View Code









  • 相关阅读:
    线程

    线程
    【java】彩票中奖码生成器:java.util.Random里的方法public int nextInt(int bound)
    【java】java.lang.Math:public static long round(double a)和public static int round(float a)
    【java】对象克隆protected Object clone() throws CloneNotSupportedException
    【java】对象变成垃圾被垃圾回收器gc收回前执行的操作:Object类的protected void finalize() throws Throwable
    【java】计算一段代码执行时长java.lang.System类里的public static long currentTimeMillis()方法
    【java】多线程同步生产者消费者问题
    【java】多线程同步死锁
  • 原文地址:https://www.cnblogs.com/xi1419/p/9972212.html
Copyright © 2020-2023  润新知