正则表达式能按某种模式匹配一系列有相似特征的字符串。它是由一些字符串和特殊符号组成的字符串。
常见正则表达式符号和特殊字符
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'
网友评论