正则表达式

来源:互联网 发布:微信h5制作软件 编辑:程序博客网 时间:2024/06/06 01:37

Python的正则表达式

    • Python的正则表达式
        • RE模块
        • 贪婪模式
        • 正则表达式

RE模块

  • 普通匹配

    s = 'ABC\\-001' # Python的字符串,由于\是特殊字符所以必须转义s = r'ABC\-001' # Python的字符串,加上r表示不用转义test = '用户输入的字符串'if re.match(r'正则表达式', test):  print('ok')else:  print('failed')
  • 切分字符串

    re.split(r'[\s\,]+', 'a,b, c  d')#['a', 'b', 'c', 'd']
  • 分组

    可用于提取字符串子串

    >>> m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')>>> m<_sre.SRE_Match object; span=(0, 9), match='010-12345'>#第一个代表匹配的字符串(默认输入0)>>> m.group(0)'010-12345'>>> m.group(1)'010'>>> m.group(2)'12345'
  • 通过search进行搜索

    通过search进行搜索的时候只要匹配到第一个符合的字串就会停止搜索

    import rer = re.search(r"1[345678]\d{9}",'17312662156dsad15215654845')r.group()#输出17312662156#这里的group第一个代表找到的第一个匹配的字符串,没有第二个
  • 通过findall找到所有匹配的字串(找到一个字符串中所有的数字)

    import restr = """fhakh213hkhj3h1k2j3hh21jk3lh12jk3h124hlkjh21312kj3h1l23jkh"""numbers = re.findall(r'\d+', str)print(numbers)#['213', '3', '1', '2', '3', '21', '3', '12', '3', '124', '21312', '3', '1', '23']
  • 通过sub进行字符串替换(将所有的数字替换为250)

    import restr = """fhakh213hkhj3h1k2j3hh21jk3lh12jk3h124hlkjh21312kj3h1l23jkh"""#替换的字符串作为第二个参数,被替换的作为第三个参数numbers = re.sub(r'\d+','250', str)print(numbers)##完成去除网页中的标签import redef add(result):  num = result.group()  num = int(num)+50  return str(num)text = """<font color=red><strong>赠书 | AI专栏(AI圣经!《深度学习》中文版)</strong></font></a>年和罚款积分<a href="http://blog.csdn.net/broadview2006/article/details/76145481"><font color=blue><strong>评论送书 | 机器学习、Java虚拟机、微信开发</strong></font></a>"""numbers = re.sub(r'<[^<>]+>|</\w+>', "", text)print(numbers)

    通过自定义函数完成特殊的替换(让每个数字等于原数+50)

    import redef add(result):  num = result.group()  num = int(num)+50  return str(num)text = """fhakh213hkhj3h1k2j3hh21jk3lh12jk3h124hlkjh21312kj3h1l23jkh"""#第二个参数为一个自定义函数numbers = re.sub(r'\d+', add, text)print(numbers)
  • 通过split进行字符串分割

    import re#由于.在正则表达式中代表特殊字符,所以可以通过\转义为普通的.result = re.split(r",|:|\.", """heel,feel:use.you:cll""")print(result)

贪婪模式

  • 神马是贪婪模式

    Python⾥数量词默认是贪婪的(在少数语⾔⾥也可能是默认⾮贪婪),总是
    尝试匹配尽可能多的字符;
    ⾮贪婪则相反,总是尝试匹配尽可能少的字符。
    在”*”,”?”,”+”,”{m,n}”后⾯加上?,使贪婪变成⾮贪婪。

    举个例子:找出网页中的图片连接:

    import retext = r'''<img?data-original="https://rpic.douyucdn.cn/appCovers/2016/11/13/1213973_201611131917_small.jpg"?src="https://rpic.douyucdn.cn/appCovers/2016/11/13/1213973_201611131917_small.jpg"?style="display:?inline;">'''img = re.findall(r"https:.+?\.jpg", text)print(img)

正则表达式

  • 匹配分组
字符 功能 | 匹配左右任意⼀个表达式 (ab) 将括号中字符作为⼀个分组 \num 引⽤分组num匹配到的字符串 (?p) 分组起别名 (?P=name) 引⽤别名为name分组匹配到的字符串

举个栗子:(匹配html的标签)

 import re  #\2代表匹配第二个分组中的内容,\1代表匹配第一个分组中的内容  re.match(r"<(.+)><(.+)></\2></\1>",'<html><div></div></html>')  #通过起别名的方式同样可以匹配  re.match(r"<(?P<key1>.+)><(?P<key2>.+)></(?P=key2)></(?P=key1)>",'<html><div></div></html>')

原创粉丝点击