Python之re模块----正则匹配

正则的介绍及应用实例详解

"""
1、什么是正则
    正则就是用一系列具有特殊含义的字符组成一套规则,该规则用来描述具有某一特征的字符串,
    正则就是用来去一个大的字符串中匹配出符合规则的子字符串

2、为什么要用正则
    1、用户注册
    2、爬虫程序

3、如何用正则

"""
import re
#\w匹配字母数字下划线-----------\W匹配非字母数字下划线
print(re.findall(‘\w‘,‘hello 123_ */-=‘))
print(re.findall(‘\W‘,‘hello 123_ */-=‘))

#\s匹配任意空白字符(\n \t都是空,都可以被\s匹配)-----------\S匹配任意非空白字符
print(re.findall(‘\s‘,‘hell\no 12\t3_ */-=‘))
print(re.findall(‘\S‘,‘hell\no 12\t3_ */-=‘))

#\d匹配任意数字-------------\D匹配任意非数字
print(re.findall(‘\d‘,‘hell\no 12\t3_ */-=‘))
print(re.findall(‘\D‘,‘hell\no 12\t3_ */-=‘))

print(re.findall(‘\n‘,‘hell\no 12\t3_ */-=‘))
print(re.findall(‘\t‘,‘hell\no 12\t3_ */-=‘))
print(re.findall(‘l‘,‘hell\no 12\t3_ */-=‘))

#直接匹配我们输入的内容
print(re.findall(‘egon‘,‘my name is egon,egon is beautiful‘))
#                                                     egon
# ^只匹配字符串的开头----------$只匹配字符串的末尾
print(re.findall(‘^egon‘,‘egon my name is egon,egon is beautiful‘))
print(re.findall(‘egon$‘,‘egon my name is egon,egon is beautifulegon1‘))
#                                                                egon

# 重复匹配
# .:匹配换行符以外的任意一个字符,(也可以用多个点,匹配多个任意字符)
print(re.findall(‘a.c‘,‘abc a1c aac asd aaaaac a*c a+c abasd‘)) #[‘abc‘,‘a1c‘,‘aac‘,‘aac‘,‘a*c‘,‘a+c‘]
#                                                        a.c
print(re.findall(‘a.c‘,‘abc a1c aac a\nc asd aaaaac a*c a+c abasd‘,re.DOTALL))  #re.DOTALL匹配所有任意字符,\n可以被匹配到
print(re.findall(‘a..c‘,‘abc a1c aac a\nc asd aaaaac a*c a+c abasd‘,re.DOTALL))

# []:匹配一个字符,该字符属于中括号内指定的字符,(可以缩小点的精度)
print(re.findall(‘a..c‘,‘abc a1 c aac asd aaaaac a *c a+c abasd =‘))
print(re.findall(‘a.c‘,‘abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c‘))
print(re.findall(‘a[a-z]c‘,‘abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c‘))
print(re.findall(‘a[A-Z]c‘,‘abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c‘))
print(re.findall(‘a[-+*/]c‘,‘abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c‘))
print(re.findall(‘a[a-z][a-z]c‘,‘abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c‘))
print(re.findall(‘a[^a-z]c‘,‘abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c‘))

# *: 必须与其他字符连用,代表左侧的字符出现0次或者无穷次
print(re.findall(‘ab*‘,‘a ab abbb abbbb a1bbbb a-123‘))
#                                              ab*
#[‘a‘,‘ab‘,‘abbb‘,‘abbbb‘,‘a‘,‘a‘]
print(re.findall(‘ab{0,}‘,‘a ab abbb abbbb a1bbbb a-123‘))

# ?: 必须与其他字符连用,代表左侧的字符出现0次或者1次
print(re.findall(‘ab?‘,‘a ab abbb abbbb a1bbbb a-123‘))
#                                              ab?
#[‘a‘,‘ab‘,‘ab‘,‘ab‘,‘a‘,‘a‘]
print(re.findall(‘ab{0,1}‘,‘a ab abbb abbbb a1bbbb a-123‘))

# +: 必须与其他字符连用,代表左侧的字符出现1次或者无穷次
print(re.findall(‘ab+‘,‘a ab abbb abbbb a1bbbb a-123‘))
#                                              ab+
# [‘ab‘,‘abbb‘,‘abbbb‘]
print(re.findall(‘ab{1,}‘,‘a ab abbb abbbb a1bbbb a-123‘))

# {n,m}: 必须与其他字符连用,代表左侧的字符出现{n,m}次,完全可以取代*、?、+
print(re.findall(‘ab{1,3}‘,‘a ab abbb abbbb a1bbbb a-123‘))
#                                                  ab{1,3}
# [‘ab‘,‘abbb‘,‘abbb‘]

# .*:贪婪匹配(匹配不精准)
print(re.findall(‘a.*c‘,‘ab123adfc1134124123adasfc123123‘))

# .*?:非贪婪匹配:推荐使用(爬虫经常用)
print(re.findall(‘a.*?c‘,‘ab123adfc1134124123adasfc123123‘))
#                                            a.*?c

#():分组,可以结合非贪婪匹配,匹配网址,()不影响匹配的结果,最终取的是分组内的
print(re.findall(‘expression="(.*?)"‘,‘expression="1+2+3/4*5" egon="beautiful"‘))
#                                       expression=".*?"

print(re.findall(‘href="(.*?)"‘,‘<p>段落</p><a href="https://www.sb.com">点我啊</a><h1>标题</h1><a href="https://www.sb.com">点我啊</a>‘))

#|:   #连接左右两个正则表达式,匹配一个成功即成功匹配
print(re.findall(‘a|b‘,‘ab123abasdfaf‘))
#                        a|b
#先不看分组,先按照正常的进行匹配,
print(re.findall(‘compan(?:ies|y)‘,‘Too many companies have gone bankrupt, and the next one is my company‘))

#companies   company

print(re.findall(r‘a\\c‘,‘a\c a1c aAc aac‘))
print(re.findall(‘a\\\\c‘,‘a\c a1c aAc aac‘))

print(re.findall(‘ale(x)‘,‘alex is SB,alex is bigSB‘))
print(re.search(‘alex‘,‘alex is SB,alex is bigSB‘))
print(re.search(‘ale(x)‘,‘alex is SB,alex is bigSB‘).group())
print(re.search(‘abcdefg‘,‘alex is SB,alex is bigSB‘))

print(re.search(‘^alex‘,‘123alex is SB,alex is bigSB‘))
print(re.match(‘alex‘,‘123alex is SB,alex is bigSB‘))

l=‘egon:18:male‘.split(‘:‘)
print(l)
l1=re.split(‘[ :/-]‘,‘a-b/c egon:18:male xxx‘)
print(l1)

print(re.sub(‘[a-z]+xx‘,‘yxp‘,‘lxx is good,sb is lllxx wxx is good cxx is good‘))
#                                                   [a-z]+xx

pattern=re.compile(‘alex‘)
print(pattern.findall(‘alex is SB,alex is bigSB‘))
print(pattern.search(‘alex is SB,alex is bigSB‘))

原文地址:https://www.cnblogs.com/sui776265233/p/9210545.html

时间: 2024-07-30 16:28:50

Python之re模块----正则匹配的相关文章

Python使用re模块正则式的预编译及pickle方案

项目上线要求当中有言论和昵称的过滤需求, 客户端使用的是python脚本, python脚本中直接利用re模块来进行正则匹配, 一开始的做法是开启游戏后, 每帧编译2条正则式, 无奈运营需求里面100+条略为复杂的正则式, 一条编译起来在pc上都需要80ms, 造成客户端开启时候的卡顿. 解决方案当然是保存re模块编译的正则式结果, 之后开机直接加载就行, 然而需要注意的是re.compile()返回的_sre.SRE_Pattern对象虽然可以使用pickle保存下来, 但是这只是个假象, 实

re模块 正则匹配

import re re.M 多行模式 位或的意思 parrterm就是正则表达式的字符串,flags是选项,表达式需要被编译,通过语法.策划.分析后卫其编译为一种格式,与字符串之间进行转换 re模块 主要为了提速,re的其他方法为了提高效率都调用了编译方法,就是为了提速 re的方法 单次匹配 re.compile 和 re.match def compile(pattern, flags=0): return _compile(pattern, flags) 可看到,re最后返回的是_comp

day6 反射,hashlib模块,正则匹配,冒泡,选择,插入排序

一.反射(自省) 首先通过一个例子来看一下本文中可能用到的对象和相关概念. import sys # 模块,sys指向这个模块对象import inspectdef foo(): pass # 函数,foo指向这个函数对象 class Cat(object): # 类,Cat指向这个类对象 def __init__(self, name='kitty'): self.name = name def sayHi(self): # 实例方法,sayHi指向这个方法对象,使用类或实例.sayHi访问

正则匹配

python中re模块 1.正则匹配基础知识 (1)通配符. .ython可以匹配 aython,jython,只有一个字符 如果要匹配a.py的话需要进行转义a\.py,r如果这样写a.py那么会匹配成aapy (2)字符集[] [a-z]ython 可以匹配a-z之间任意一个字符 yython [a-zA-Z0-9]ython 匹配a-z,A-Z,0-9的任意字符串 [^p]ython反转匹配,可以匹配除了python的字符串 (3)选择符 | python|perl匹配python和per

python - re正则匹配模块

re模块 re 模块使 Python 语言拥有全部的正则表达式功能. compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象.该对象拥有一系列方法用于正则表达式匹配和替换. re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数. re.match函数 re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none. # (匹配规则,字符串,特殊标志) re.match(pattern

Python正则匹配字母大小写不敏感在读xml中的应用

需要解决的问题:要匹配字符串,字符串中字母的大小写不确定,如何匹配? 问题出现之前是使用字符串比较的方式,比如要匹配'abc',则用语句: 1 if s == 'abc':#s为需要匹配的字符串 2 print '匹配成功\n' 现在的问题是s可能是Abc.ABC等等,所以需要大小写不敏感的匹配,如果把需要匹配的模式的大小写进行罗列,那即使是三个字母的短模式也是很麻烦,查了一下,正则表达式re模块中有个参数flags=re.I,这样就可以大小写不敏感的匹配了,示例如下: 1 import re

python 爬蟲 解析/正则匹配/乱码问题整理

今日爬取一听/扬天音乐都遇到了某些问题,现在对爬取过程中遇到的问题,做对于自己而言较为系统的补充与解释.主要问题有一下几点: 一:beautiful,urllib等库进行网页解析时,对于目标下的东西无法进行解析与显示 二:正则匹配虽然看过许多,但实际使用时仍然不够熟练,需要大量参考,故而,打算重新整理 三:对于乱码问题,曾在建mysql数据库时,头疼多次,现打算对于网页解析的乱码处理方法做些整理 这次目标是爬取扬天音乐"http://up.mcyt.net/",需要获取的内容有:歌曲名

Python全栈 正则表达式(re模块正则接口全方位详解)

re模块是Python的标准库模块 模块正则接口的整体模式 re.compile 返回regetx对象 finditer fullmatch match search 返回 match对象 match.属性|方法 re模块的使用: regex = re.compile(pattern,flags = 0) 功能 : 生成正则表达式对象 参数 : pattern     正则表达式 flags  功能标志位,丰富正则表达式的匹配 返回值: 返回一个正则表达式对象 re.findall(patter

web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签

标签选择器对象 HtmlXPathSelector()创建标签选择器对象,参数接收response回调的html对象需要导入模块:from scrapy.selector import HtmlXPathSelector select()标签选择器方法,是HtmlXPathSelector里的一个方法,参数接收选择器规则,返回列表元素是一个标签对象 extract()获取到选择器过滤后的内容,返回列表元素是内容 选择器规则 //x 表示向下查找n层指定标签,如://div 表示查找所有div标签