python-正则
一、match、search与findall
- match 只要从开头进行匹配,如果匹配不成功则就返回None
- search 进行正则字符串匹配方法,匹配的是整个字符串。只要有匹配的后面就不会继续进行检索,找到一个匹配的就会停止。
- findall 匹配整个字符串,找到一个继续向下找一直到字符串结尾
result.span() ----> 返回位置
使用group提取到匹配的内容
二、用法1
result = re.findall('[a-z][0-9][a-z]',msg)
表示在msg中找到类似于‘a9g’这样前后都是字母中间是数字的字符
result = re.findall('[a-z][0-9]+[a-z]',msg)
‘+’放在[0-9]之后,表示可以出现1个及以上的数字
result = re.findall('[a-z][0-9]{n}',msg)
表示后面一共出现n个数字
result = re.findall('^[a-z][0-9][a-z]$',msg)
开头加‘^’表示从字符串msg的开头进行匹配,结尾加‘$’表示匹配到字符串msg的结尾为止。
result = re.findall('[a-z][0-9]{m,n}',msg)
表示后面出现的数字个数大于等于m小于等于n
- ‘*’用于将前面的模式匹配0次或多次(贪婪模式,几尽可能多的匹配)----> >=0
- ‘+’用于将前面的模式匹配1次或多次(贪婪模式)----> >=1
- ‘?’用于将前面的模式匹配0次或1次(贪婪模式) ----> 0,1
- ‘{m}’用于验证将前面的模式匹配m次
- ‘{m,}’用于验证将前面的模式匹配m次或者多余m次 ----> >=m
- ‘{m,n}’用于验证将前面的模式匹配大于等于m次并且小于等于n次(贪婪模式)
- ‘*?’‘+?’‘??’即上面三种特殊字符的非贪婪模式(尽可能少的匹配)
- ‘{m,n}?’即上面的非贪婪版本
三、用法2
- \A:表示从字符串的开始处匹配。
- \Z:表示从字符串的结束处匹配,如果存在换行,只匹配到换行前的结束字符串。
- \b:匹配一个边界单词,也就是指单词和空格间的位置。例如,‘py\b’可以匹配‘python’中的‘py’,但不能匹配‘openpyx1’中的‘py’。
- \B:匹配非单词边界。‘py\B’可以匹配‘openpyx1’中的‘py’,但不能匹配‘python’中的‘py’。
- \d:匹配任意数字,等价于[0-9]。
- \D:匹配任意非数字字符。等价于[^\d]。
- \s:匹配任意空白字符,等价于[\t\n\r\f]。
- \S:匹配任意非空白字符,等价于[^\s]。
- \w:匹配任意字母数字及下划线,等价于[a-zA-Z0-9]。
- \W:匹配任意非字母数字及下划线,等价于[^\w]。
- \:匹配原义的反斜杠\。
注意:
- . 任意字符除(\n)
- ^ 开头
- $ 结尾
- [] 范围
- () 一组
比较:()与[]
- (word1|word2|word3) word1或者word2或者word3
- [word] w或者o或者r或者d四个字母
四、分组
() ----> result.group(1) 获取组中的内容
在分组的时候还可以结合‘|’
result = re.match(r'(\d{3}|\d{4})-(\d){8})$',phone)
print(result)
比较:
- 不需要引用分组的内容:
msg = '<html><hl>abc<hl><html>'
result = re.match(r'<[0-9a-zA-Z]+>(.+)<[/0-9a-zA-Z]>',msg)
print(result)
- 引用分组匹配内容:
法一: number:\number 引用第number组的数据
msg = '<html><hl>abc<hl><html>'
result = re.match(r'<[0-9a-zA-Z]+><[0-9a-zA-Z]+>(.+)</\2></\1>$',msg)
print(result)
法二:?P<名字>
msg = '<html><hl>abc<hl><html>'
result = re.match(r'<(?P<name1>\w+)><(?P<name2>\w+)(.+)</(?P=name2)></(?P=name1)>',msg)
print(result)
print(result.group(1))
五、其他
- sub(正则表达式,‘新内容’,string)
result = re.sub(r'\d+','90','java:99,python:95')
----> 替换
- split()
result = re.split(r'[,:]','java:99,python:95')
----> 在字符串中搜索,如果遇到‘:’或者‘,’就分割,将分割的内容都保存到列表中。