07、正则表达式
学习正则表达式操作字符串 re模块是用C语言写的没匹配速度非常快 其中compile函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象,该对象拥有一系列方法用于正则表大会匹配和替换,re模块也提供了与这下方法功能完全一致的函数,这些函数适用一个模式字符串做为他们的第一个参数
re.macth方法
- re.math 尝试从字符串起始位置匹配,返回match对象,,否则返回None,适用group()获取匹配成功的字符串
- 语法:re.match(pattern,string,flags)
参数 | 描述 |
---|
pattern | 匹配的正则表达式 | string | 要匹配的字符串 | flags | 标志位,用于控制正则表达式的匹配方式:如:是否匹配大小写,多行匹配 |
import re
str='Python is the best language in the world'
result= re.match('P',str)
print(type(result))
print(result.group())
标志位
- 如果使用多个标志位,使用|分割,如:re.I|re.M
修饰符 | 描述 |
---|
re.I | 适匹配对大小写不敏感 | re.L | 做本地化识别匹配 | re.M | 多行匹配,影响^ 和$ | re.S | 使.匹配包括换行在内的所有字符 | re.U | 根据Unicode字符集解析字符,这个标志影响\w,\W ,\b,\B | re.X | 该标识符通过给予你更灵活的格式以便于你将正则表达式写得更易于理解。 |
import re
strData='Python is the best language in the world\
gslfjgldsjgls'
res=re.match('(.*?)is(.*?)',strData,re.I)
print(res.group(1))
print(res.group(2))
常用匹配规则
符号 | 匹配规则 |
---|
.(点) | 匹配任意1个字符除了换行符 | [abc] | 匹配abc中任意一个 | \d | 匹配一个数字0-9 | \D | 匹配非数字 | \s | 匹配空白 即空格 tab键 | \S | 匹配非空格 | \w | 匹配单词字符 即a-z A-Z 0-9 _ | \W | 匹配非单词字符 |
匹配字符数量
符号 | 匹配规则 |
---|
* | 匹配前一个字符出现0次或者无限次,即可有可无 | + | 匹配前一个字符出现1次或者无限次,即至少有1次 | ? | 匹配前一个字符出现1次或者0次,即要么有1次要么没有 | {m} | 匹配前一个字符出现m次 | {m,} | 匹配前一个字符至少出现m次 | {m,n} | 匹配前一个字符出现从m次到n次 |
7.1、限定匹配数量规则
import re
res=re.match('[a-z][a-z]*','MyPython',re.I)
print(res.group())
res=re.match('[a-zA-Z]+[\w]*','mynAMEDCeisz848s_')
print(res.group())
res=re.match('[a-zA-Z]+[\d]?','mkohjhjgu8jg8')
print(res.group())
res=re.match('\d{4,}','46145')
if res:
print('匹配成功{}'.format(res.group()))
res=re.match('[a-zA-Z0-9]{6,11}@163.com','318129549@163.com')
print(res.group())
7.2、原生字符串
import re
print(re.match(r'c:\\a.text','c:\\a.text').group())
res=re.match('^p[\w]{5}','python is language')
print(res.group())
res=re.match('[\w]{5,15}@[\w]{2,5}.com$','318129549@qq.com')
print(res.group())
7.3、分组匹配
import re
res=re.match('[\w]*|100','100')
print(res.group())
res=re.match('([0-9]*)-(\d*)','123456-464651561')
print(res.group())
print(res.group(1))
print(res.group(2))
data='<div><h1>www.baidu.com</h1></div>'
res=re.match(r'<(?P<div>\w*)><(?P<h1>\w*)>(?P<data>.*)</\w*></\w*>',data)
print(res.group())
7.4、编译函数compile
'''
compile将正则表达式模式编译成一个正则表达式对象
reg=re.compile(pattern)
result=reg.match(string)
等效于result=re.match(pattern,string)
使用re.compile和保持所产生的正则表达式对象重用效率更高
'''
import re
data='1364'
pattern=re.compile('.*')
res=pattern.match(data)
print(res.group())
data='我爱我伟大的祖国,I love China,China is a great country'
rees=re.search('China',data)
print(rees)
print(rees.span())
print(rees.group())
data='华为牛逼是华人的骄傲'
pattern=re.compile('华.')
res=pattern.findall(data)
print(res)
data1='Pythons是很受欢迎的编程语言'
pattern='[a-zA-Z]+'
res=re.sub(pattern,'C#',data1)
resn=re.subn(pattern,'C#',data1)
print(res)
print(resn)
data='百度,腾讯,阿里,华为,360,字节跳动'
print(re.split(',',data))
7.5贪婪模式和非贪婪模式
'''
python 中默认是贪婪的,总是贪婪的匹配尽可能多的字符,非贪婪相反,总是尝试匹配尽可能少的字符
在 ” * ? + {m,n}"后面加上 ? 使贪婪变成非贪婪
'''
import re
res=re.match('[\d]{6,9}','111222333')
print(res.group())
res=re.match('[\d]{6,9}?','111222333')
print(res.group())
content='asdfbsdbdsabsd'
pattern=re.compile('a.*?b')
res=pattern.search(content)
print(res.group())
|