zoukankan      html  css  js  c++  java
  • python基础|模块---re模块

      python中的re模块是正则技术中应用。对于正则就是正则表达式,正则表达式是独立一门技术,在各个编程体系都有它的“身影"。在python中在爬虫技术中,数据分析,它都是必不可少的存在。主要利用正则表达式筛选字符串中我们需要的字符串类型数据。

      正则表达式基础知识。元字符和量词。

    元字符

    匹配作用

    .

    可以匹配除换行符以外的任何字符

    w

    匹配字母,数字和下滑线

    d

    匹配数字

    s

    匹配空格

    W

    匹配非字母,数字和下划线

    D

    匹配非数字

    S

    匹配非空格

    ^

    匹配^字符串开头。用法(^a:匹配a开头的字符串)

    $

    匹配$字符串结尾。用法(a$:匹配字符串a结尾)

    匹配换行符

    匹配一个制表符

    

    匹配单词的结尾

    ()

    匹配括号内的表达式,也表示一个分组

    […]

    匹配字符组中的字符

    [^….]

    匹配除了字符组中的所有字符

    a|b

    匹配a或b字符

      量词

     量词

    用法说明

    *

    代表零次或多次

    +

    重复零次或多次

    重复零次或一次

    {n}

    重复n次

    {n,}

    至少重复n次

    {n, m}

    重复n次到m次

       以上便是一些基本知识。对于基本知识的应用。进入这个网站:http://tool.chinaz.com/regex/。可以测试这些符号的使用。

      正则表达式在使用量词*和+,正则匹配是贪婪匹配。默认的是尽可能多的匹配。这个时候需要.*?这个正则表达式:这个正则表达式.任意字符。在前也可以自己添加字符,*量词多次匹配。?匹配一次或多次。在后面添加结束的字符。对于贪婪匹配,有惰性匹配。*?重复次任意,但尽可能少重复。+?重复次一次或多次,但尽可能少的匹配。??重复0次到一次,但尽可能少的匹配。此外在匹配时还需要注意转义符的使用。不想是但转义可以用\转义,双\则需要\对其转义。或者使用r'\'转义

      在python中re模块的使用。使用调用模块:import re调用。常用的re模块中的函数有findall(), serch(), match()。

      findall('正则表达式', '匹配对象(字符串类型)')。找到正则表达式中的内容,并且返回一个列表,列表中的元素就匹配的结果。

    # findall
    res = re.findall('a', 'dghahfhjfadhbvavlfhjvb')
    print(res)
    >>>['a', 'a', 'a']

      search('正则表达式', '匹配对象(字符串类型)')。找到正则表达式中的内容之找一次,找到后就结束。查找到不存在结果返回None。并且返回结果需要借助group函数打印。

    res = re.search('a','dasda' )
    print(res.group())

      match('正则表达式', '匹配对象(字符串类型)')。只会以正则表达式匹配开头字符串,开头字符长不符合返回None。打印时也需要借助group函数。

    ret = re.split('[ab]', 'abcd')  # 先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割
    print(ret)  # ['', '', 'cd']
    
    ret = re.sub('d', 'H', 'eva3egon4yuan4', 1)#将数字替换成'H',参数1表示只替换1个
    print(ret) #evaHegon4yuan4
    
    ret = re.subn('d', 'H', 'eva3egon4yuan4')#将数字替换成'H',返回元组(替换的结果,替换了多少次)
    print(ret)
    
    obj = re.compile('d{3}')  #将正则表达式编译成为一个 正则表达式对象,规则要匹配的是3个数字
    ret = obj.search('abc123eeee') #正则表达式对象调用search,参数为待匹配的字符串
    print(ret.group())  #结果 : 123
    
    import re
    ret = re.finditer('d', 'ds3sy4784a')   #finditer返回一个存放匹配结果的迭代器
    print(ret)  # <callable_iterator object at 0x10195f940>
    print(next(ret).group())  #查看第一个结果
    print(next(ret).group())  #查看第二个结果
    其他内置方法

      使用search和match时可以给正则表达式中的组取名,在调用时使用字符串类型组名和group函数即可调用

    res = re.search('(?P<rec>[a-d]*)', 'adaabuxdabcdabcddadadkamfaslcjhlancabcd' )
    print(res.group('rec'))
    # 必须在组内,以?P<名字>格式
    >>>adaab

      在findall的分组机制有些不同

    res = re.findall('www.(baidu|jd).com', 'www.baidu.com')
    print(res)
    >>>['baidu']
    # 在组内加上?:
    res = re.findall('www.(?:baidu|jd).com', 'www.baidu.com')
    print(res)
    >>>['www.baidu.com']
  • 相关阅读:
    360安全桌面的屏保图片在哪个目录下?
    IntelliJ 注解@Slf4j后找不到log问题解决
    运行springboot项目报错:Field userMapper in XX required a bean of type 'xx' that could not be found.
    springsecurity
    Error creating bean with name 'sqlSessionFactory' defined in class path resource [config/spring/applicationContext.xml]: Invocation of init method failed;
    idea热部署
    数据结构导论 三 线性表-顺序存储
    数据结构导论 二 时空性
    树莓派安装、卸载、更新软件
    数据结构导论第一章
  • 原文地址:https://www.cnblogs.com/huaiXin/p/11201825.html
Copyright © 2011-2022 走看看