正则表达式---知多少

Python的正则表达式支持

re模块所包含的全部属性和函数:
  • re.compile(pattern,flags=0):该函数用于将正则表达式字符串编译成_sre.SRE_Pattern对象,该对象代表了正则表达式编译之后在内存中的对象,可以缓存并复用正则表达式字符串;
  • re.match(pattern,string,flags=0):尝试从字符串的开始位置来匹配正则表达式,如果开始位置匹配不成功,match()函数就返回None。其中pattern参数代表正则表达式,string代表被匹配的字符串,flags代表正则表达式的匹配旗标;
  • re.search(pattern,string,flags=0):扫描整个字符串,并返回字符串中第一处匹配pattern的匹配对象;
  • re.findall(pattern,string,flags=0):扫描整个字符串,并返回字符串中所有匹配pattern的子串组成的列表;
  • re.finditer(pattern,string,flags=0):扫描整个字符串,并返回字符串中所有匹配pattern的子串组成的迭代器;
  • re.fullmatch(pattern,string,flags=0):该函数要求整个字符串能匹配pattern,如果匹配则返回包含匹配信息的_sre.SRE_Match对象;否则返回None;
  • re.sub(pattern,repl,string,count=0,flags=0):该函数用于将string字符串中所有匹配pattern的内容替换成repl;repl是被替换的字符串,也可以是一个函数;count参数控制最多替换多少次,如果指定为0,则表示全部替换;
  • re.split(pattern,string,maxsplit=0,flags=0):使用pattern对string进行分割,该函数返回分割得到的多个子串组成的列表,其中maxsplit参数控制最多分割几次。
  • re.purge():清除正则表达式缓存
  • re.escape(pattern):对模式中除ASCII字符、数值、下画线之外的其他字符进行转义
re模块中_sre.SRE_Match对象包含以下方法或属性:
  • match.group([group1,…]):获取该匹配对象中指定组所匹配的字符串
  • match.__getitem __(g):这是match.group(g)的简化写法
  • match.groups(default=None):返回match对象中所有组所匹配的字符串组成的元组
  • match.groupdic(default=None):返回match对象中所有组所匹配的字符串组成的字典
  • match.start([group]):获取该匹配对象中指定组所匹配的字符串的开始位置
  • match.end([group]):获取该匹配对象中指定组所匹配的字符串的结束位置
  • match.span([group]):获取该匹配对象中指定组所匹配的字符串的开始位置和结束位置

正则表达式旗标

Python支持的正则表达式旗标都使用该模块中的属性来代替:

  • re.A或re.ASCII:该旗标控制\w,\W,\b,\B,\d,\D,\s和\S只匹配ASCII字符,而不匹配所有的Unicode字符
  • re.DEBUG:显示编译正则表达式的debug信息
  • re.I或re.IGNORECASE:使用正则表达式匹配时不区分大小写
  • re.L或re.LOCALE:根据当前区域设置使用正则表达式匹配时不区分大小写
  • re.M或re.MULTILINE:多行模式的旗标
  • re.S或s.DOTALL:让点(.)能匹配包括换行符在内的所有字符
  • re.U或re.Unicode:该旗标控制\w,\W,\b,\B,\d,\D,\s和\S能匹配所有的Unicode字符
  • re.X或re.VERBOSE:通过该旗标允许分行写正则表达式

创建正则表达式

正则表达式就是一个用于匹配字符串的模板,它可以匹配一批字符串,所以创建正则表达式就是创建一个特殊的字符串。
正则表达式所支持的合法字符

字符解释
x字符x
\uhhhh十六进制值0xhhhh所表示的Unicode字符
\t制表符
\n新行符
\r回车符
\f换页符
\a报警符
\eEscape符
\cxx对应的控制符

正则表达式中的特殊字符

特殊字符说明
$匹配一行的结尾,要匹配$字符本身,请使用$
^匹配一行的开头,要匹配^字符本身,请使用^
()标记子表达式的开始位置和结束位置,要匹配这些字符,请使用(和)
[]用于确定中括号表达式的开始位置和结束位置,要匹配这些字符,请使用[和]
{}用于标记前面子表达式的出现频度,要匹配这些字符,请使用{和}
*指定前面子表达式可以出现0次或多次,要匹配字符本身,请使用\
+指定前面子表达式可以出现一次或多次,要匹配+字符本身,请使用+
?指定前面子表达式可以出现0次或一次,要匹配?字符本身,请使用?
.匹配除换行符\n之外的任意单个字符,要匹配.字符本身,请使用.
\用于转义下一个字符,要匹配\字符,请使用\

正则表达式中,通配符是可以匹配多个字符的特殊字符,称为“预定义字符”。
正则表达式所支持的预定义字符

预定义字符说明
.默认可匹配除换行符之外的任意字符
\d匹配0~9的所有数字
\D匹配非数字
\s匹配所有的空白字符,包括空格、制表符、回车符、换页符、换行符等
\S匹配所有的非空白字符
\w匹配所有的单词字符,报警0~9的数字,26个英文字母和下画线
\W匹配所有的非单词字符

方括号表达式

方括号表达式说明
表示枚举例如[abc],表示a、b、c其中任意一个字符
表示范围例如[a-f],表示a~f范围内的任意字符
表示求否:^例如[^abc],表示非a、b、c的任意字符

边界匹配符

边界匹配符说明
^行的开头
$行的结尾
\b单词的边界,即只能匹配单词前后的空白
\B非单词的边界,即只能匹配不在单词前后的空白
\A只能匹配字符串的开头
\Z只能匹配字符串的结尾

子表达式

正则表达式支持圆括号表达式,用于将多个表达式组成一个子表达式,在圆括号中可以使用或运算符(|),子表达式支持如下用法:

  • (exp):匹配exp表达式并捕获一个自动命名的组,后面可通过"\1"引用第一个捕获组所匹配的子串,通过"\2"引用第二个捕获组所匹配的子串…以此类推
  • (?Pexp):匹配exp表达式并捕获成命名组,该组名字为name,后面可通过(?P=name)来引用前面捕获的组
  • (?P=name):引用name命名组所匹配的子串
  • (?:exp):匹配exp表达式并且不捕获
  • (?<=exp):括号中的子模式必须出现在匹配内容的左侧,但exp不作为匹配的一部分
  • (?=exp):括号中的子模式必须出现在匹配内容的右侧,但exp不作为匹配的一部分
  • (?<!exp):括号中的子模式必须不出现在匹配内容的左侧,但exp不作为匹配的一部分
  • (?!exp):括号中的子模式必须不出现在匹配内容的右侧,但exp不作为匹配的一部分
  • (?#comment):注释组
  • (?aiLmsux):旗标组,用于为整个正则表达式添加行内旗标
  • (?imsx-imsx:exp):只对当前组起作用的旗标

贪婪模式与勉强模式

  • *:限定前面的子表达式可出现0~N次
  • +:限定前面的子表达式可出现1~N次
  • ?:限定前面的子表达式出现0~1次
  • {n,m}:n和m均为非负整数,其中n≤m,限定前面的子表达式出现n~m次
  • {n,}:n是一个非负整数,限定前面的子表达式至少出n次
  • {,m}:m是一个非负整数,限定前面的子表达式至多出现m次
  • {n}:n是一个非负整数,限定前面的子表达式必须出现n次
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值