Python正则表达式
正则表达式
- 正则表达式是使用一系列特殊符号从字符串中匹配内容。
- 正则表达式是独立于所有语言的语法,所有语言中正则表达式的语法是相同的,只是使用方法不一样
**fullmatch(正则表达式,字符串):**判断字符串是否完全符号正则表达式的规则,成立返回一个对象,不成立返回None
匹配类符号
-
通配符:
.
可以匹配任意符号
import re re_str = 'a.b' str1 = 'acb' res = re.fullmatch(re_str,str1) print(res)
-
数字符:
**\d :**匹配0-9数字
**\D :**匹配非数字re_str = 'a\d\dc' str2 = 'a12c' res1 = re.fullmatch(re_str,str2) print(res1)
-
普通符号:
在正则表达式中没有特殊含义的符号
re_str = 'abcd' str3 = 'abcd' print(re.fullmatch(re_str, str3))
-
空白符:
**\s :**匹配空白符号(空格,\n,\t等)
**\S :**匹配非空白符号re_str = 'a\sb' str4 = 'a b' print(re.fullmatch(re_str,str4))
-
**\w:**匹配数字、字母、下划线、(中文、朝鲜语)
-
字符集:
[字符集] - 从 [ ] 的字符集中匹配一个符号
规则:- 链接的是范围,其左边必须小于右边,不能出现在开头或结尾
常见的字符集:
**[a-z],[A-Z],[0-9]:**表示匹配其中任意一个字母或数字
**[\u4e00-\u9fa5]:**匹配任意一个汉字
**[a-zA-Z]:**匹配任意一个字母
[^字符集]:匹配不在字符集中的元素
字符集规则不变,^只能放在字符集的开头
重复
重复符号
-
**?:**匹配0或1次
import re re_str = 'a\d?' str1 = 'a' print(re.fullmatch(re_str,str1))
-
**+:**匹配一次或多次
str2 = 'c32c4v41b3g2' re_str = '[0-9]+' print(re.findall(re_str,str2))
-
***:**匹配任意次
-
**{M,N}:**至少匹配M次,最多匹配N次
-
**{N}:**匹配N次
-
**{N,}:**最少匹配N次
-
**{,N}:**最多匹配N次
贪婪和非贪婪
**贪婪:**所有次数不确定的匹配都是贪婪的(一次性匹配更多的元素)
如:+
, *
, {,N}
, {M,}
等
**非贪婪:**一次匹配取最短长度的结果(在贪婪涉及的符号基础上添加一个 ? 即可
如:+?
, *?
, {,N}?
等
str3 = 'zxczxczxc'
re_str = 'z.+c'
print(re.findall(re_str, str3))
re_str = 'z.+?c'
print(re.findall(re_str, str3))
分组和分支
分支:|
等同于or,表示或者
import re
str1 = 'zxvvxz'
re_str = '[a-z]{3}'
print(re.findall(re_str,str1))
re_str = 'zxv|vxz'
print(re.findall(re_str,str1))
分组:()
- 能够将同类项提出来
- 能够将分组中的结果重复
str2 = 'zxczxv'
re_str = '(zx(c|v))'
print(re.findall(re_str,str2))
**\n:**可以将第n个分组的结果重复
str3 = '123==123123'
re_str = r'(\d{3})(=)\2\1\1'
print(re.fullmatch(re_str,str3))
正则表达式不是转义字符,在写正则表达式时,在正则表达式前面添加r或者R
正则表达式方法
fullmatch/findall/split/sub/search/match
-
**fullmatch:**查看整个字符串是否符合正则表达式(不常用)
-
**findall:**1.将字符串中所有符合正则表达式的规则的结果匹配出来
2.如果正则表达式中出现分组,会先安装正则表达式匹配结果,再将符合分组中正则表达式的结果提取出来 -
**split:**按照正则表达式的规则切割字符串
-
**sub:**将符合正则表达式的字符串替换为新的字符串
-
**search:**查找字符串中第一个符合正则表达式的结果(不常用)
-
**match:**查看字符串的开头是否符合正则表达式(不常用)
import re
str1 = 'a,b,c'
re_str = 'a'
print(re.match(re_str, str1))
re_str = '[a-z]'
print(re.search(re_str,str1))
re_str = ','
print(re.split(re_str,str1))
# re.sub(正则,newStr,oldStr)
print(re.sub('[,]','',str1))