zoukankan      html  css  js  c++  java
  • Python 22 常用模块03

    常用模块03 re

    1. 正则表达式

    • 正则表达式是对字符串操作的各种逻辑公式. 我们一般使用正则表达式对字符串进行匹配和过滤
    1. 字符组
      字符组很简单用[]括起来. 在[]中出现的内容会被匹配. 例如:[abc] 匹配a或b或c
      如果字符组中的内容过多还可以使用- , 例如: [a-z] 匹配a到z之间的所有字母 [0-9]
      匹配所有阿拉伯数字

    2. 简单元字符
      基本的元字符:
      . 匹配除换行符以外的任意字符
      w 匹配字母或数字或下划线
      s 匹配任意的空字
      d 匹配数字
      匹配一个换行符
      匹配一个制表符
       匹配一个单词的结尾
      ^ 匹配字符串的开始
      $ 匹配字符串的结尾
      W 匹配数字字母或数字或下划线
      D 匹配一数字
      S 匹配非空白符
      a|b 匹配字符a或字符b
      () 匹配括号内的表达式,也表示一个组
      [...] 匹配字符组中的字符
      [^...] 匹配除了字符组中字符的所有字符

    3. 量词
      * 重复零次或更多次
      + 重复一次或更多次
      ? 重复零次或一次
      {n} 重复n次
      {n,} 重复n次或更多次
      {n,m} 重复n到m次

    4. 惰性匹配和贪婪匹配

    • 在量词中的 *, +,{} 都属于贪婪匹配. 就是尽可能多的匹配到结果.
    • 在使用 .*后面如果加了? 则是尽可能的少匹配. 表示惰性匹配
    • .*?x 的特殊含义 找到下一个x为止.
    1. 分组
      在正则中使用()进行分组. 比如. 我们要匹配一个相对复杂的身份证号.身份证号分成两种. 老的身份证号有15位. 新的身份证号有18位. 并且新的身份证号结尾有可能是x.
      给出以下正则:
    ^[1-9]d{13,16}[0-9x]$
    ^[1-9]d{14}(d{2}[0-9x])?$
    ^([1-9]d{16}[0-9x]|[1-9]d{14})$
    

    2. re模块的使用

    re模块是python提供的一套关于处理正则表达式的模块. 核心功能有四个:

      1. findall 查找所有. 返回list
    lst = re.findall("m", "mai le fo len, mai ni mei!")
    print(lst) # ['m', 'm', 'm']
    lst = re.findall(r"d+", "5点之前. 你要给我5000万")
    print(lst) # ['5', '5000']
    
      1. search 会进行匹配. 但是如果匹配到了第一个结果. 就会返回这个结果. 如果匹配不上search返回的则是None
    ret = re.search(r'd', '5点之前. 你要给我5000万').group()
    print(ret) # 5
    
      1. match 只能从字符串的开头进行匹配
    ret = re.match('a', 'abc').group() 
    print(ret) # a
    
      1. finditer 和findall差不多. 只不过这时返回的是迭代器
    it = re.finditer("m", "mai le fo len, mai ni mei!")
    for el in it:
     print(el.group()) # 依然需要分组
    
    • 5.其他操作
    ret = re.split('[ab]', 'qwerafjbcd') # 先按'a到'qwer'和'fjbcd'在对'qwer'和'fjbcd'分别按'b'分割print(ret) # ['qwer', 'fj', 'cd']
    
    ret = re.sub(r"d+", "_sb_","alex250taibai250wusir250ritian38") # 把字符串的数字换成__sb__
    
    print(ret) # alex_sb_taibai_sb_wusir_sb_ritian_sb_
    ret = re.subn(r"d+", "_sb_", "alex250taibai250wusir250ritian38") # 将数字替换成'__sb__',返回元组(替换的结果,替换了多少次)
    
    print(ret) # ('alex_sb_taibai_sb_wusir_sb_ritian_sb_', 4)
    
    obj = re.compile(r'd{3}') # 将正则表达式编译成为一个 正则表达式对象, 规则要匹配的是3个数字
    
    ret = obj.search('abc123eeee') # 正则表达式对象调用search, 参数为待匹配的字符串
    print(ret.group()) # 结果: 123
    
    • 爬虫的重点

    obj = re.compile(r'(?P<id>d+)(?P<name>e+)') # 从正则表达式匹配的内容每个组起名字

    ret = obj.search('abc123eeee') # 搜索
    print(ret.group()) # 结果: 123eeee
    print(ret.group("id")) # 结果: 123 # 获取id组的内容
    print(ret.group("name")) # 结果: eeee # 获取name组的内容

  • 相关阅读:
    中国历史朝代公元对照简表
    [Solved] DashBoard – Excel Service: The data sources may be unreachable, may not be responding, or may have denied you access.
    Delete/Remove Project from TFS 2010
    Sharepoint site showing system account instead of my username on the top right corner.
    你的成功在于你每天养成的习惯
    Internet Information Services is running in 32bit emulation mode. Correct the issue listed above and rerun setup.
    Prepare to back up and restore a farm (Office SharePoint Server 2007)
    Word中字号与磅值的对应关系
    How to: Change the Frequency for Refreshing the Data Warehouse for Team System
    UI Automation in WPF/Silverlight
  • 原文地址:https://www.cnblogs.com/NATO/p/9991172.html
Copyright © 2011-2022 走看看