正则表达式能按某种模式匹配一系列有相似特征的字符串。它是由一些字符串和特殊符号组成的字符串。
常见正则表达式符号和特殊字符
1.表示字符
表示法
描述
正则表达式示例
.
匹配任意一个字符(除了\n)
a.c 匹配在字母“a”和“c”之间的任意一个字符;例如abc、a9c、a#c等
[]
匹配[]中列举的字符
a[0-9] 匹配字母a后面跟着0到9任意一个数字;例如a1、a3、a9等
[^...]
匹配不在此字符集中出现的任何一个字符
a[^A-Z];匹配a后面不能是大写字母,例如不能是aA、aD、aZ等
\d
匹配任何十进制数字(\D与\d相反,匹配非数字)
a\dc 匹配a和c之间任何一个数字;例如a1c、a6c、a8c等
\s
匹配任何空格字符,即空格、tab键、\n、\r、\t等(\S与\s相反,匹配非空格)
a\sc 匹配a和c之间任何空白字符;例如a c、a c等
\w
匹配任何字母数字字符(\W与\w相反)
a\wc 匹配a和c之间任何一个字母数字字符;例如aac、a2c、a*c等
2.表示数量
表示法
描述
正则表达式示例
*
匹配前一个字符出现0次或者无限次,即可有可无
a.*c ;匹配如ac、abc、abbbbbbbbbbc等
+
匹配前一个字符出现1次或者无限次,即至少有一次
a.+c;匹配如abc、abbbbc等,但不能匹配ac
?
匹配前一个字符出现1次或者0次,即要么有1次,要么没有
a.?c;匹配如ac、abc
{m}
匹配前面一个字符出现m次 比如填{3}此表示需要出现3
a.{3}c;匹配abbbc
{m,}
匹配前一个字符至少出现m次 比如填{5,}表示至少出现五次
{m.n}
匹配前一个字符出现从m到n次 比如填{3,5}表示至少出现3次最多出现5次
a.{3,5}c;匹配abbbc、abbbbbc
3.表示边界
表示法
描述
^
匹配以什么字符符为开头
$
匹配以前一个字为结尾
\b
匹配一个单词的边界
\B
匹配非单词边界
|
匹配左右两边任意一个表达式
re模块
# 导入re模块
import re
match()方法
result = re.match("正则表达式", "要匹配的字符串")
re.match是用来进行正则匹配检查的方法,若字符串匹配正则表达式,则match方法返回匹配对象(macth object),否则返回None(注意不是空字符串"")macth object具有group方法,用来返回字符串的匹配部分。
search()方法
result = re.search("正则表达式", "要匹配的字符串")
search()和match()的区别是:match是从左往右依次匹配所以^要不要都没影响,search是找所有字符串中是否包含要匹配的字符串。如果要从第一个字符串开始找就需要用到^
findall()方法
如果在一堆字符串中匹配到多个一样的值全部以列表的形式返回。search()和match()都只返回第一个匹配到的值
sub()方法
re.sub("被替换的字符串(把什么)","替换后的字符串(替换成什么,可以接收一个函数)", "原始字符串")
贪婪模式非贪婪模式
默认匹配时都是贪婪模式,就是尽可能多的去匹配,只要在匹配字符后面加个?号就可以关闭贪婪模式。即非贪婪模式,尽可能的匹配少的字符
import re
s = 'aa12345ddddd'
# 贪婪
re.match('aa(\d+)', s).group(1)
'12345'
# 非贪婪
re.match('aa(\d+?)', s).group(1)
'1'