正则表达式规则(python re模块)

本文深入介绍了Python中的正则表达式,包括常见符号、特殊字符及其扩展表示法。通过实例展示了如何进行分组、换位、子组复用以及前视匹配等操作。此外,还探讨了正则表达式的各种标志如(?i)、(?m)、(?s)等,以及它们在多行匹配、忽略大小写等方面的应用。对于开发者来说,这是一篇不可多得的正则表达式学习资源。
摘要由CSDN通过智能技术生成

本文的正则表达式介绍使用python的re模块。
源源不断 更新。

常见正则表达式符号和特殊字符

表示法解释 / 说明
 ------------------------------------------------常见字符------------------------------------------------
literal匹配文本字符串字面值literal
re1|re2匹配正则表达re1或re2
.匹配任何字符(除了\n之外)
^匹配字符串起始部分
$匹配字符串终止部分
*匹配0次或多次前面出现的正则表达式
+匹配1次或多次前面出现的正则表达式
?匹配0次或1次前面出现的正则表达式
{N}匹配N次前面出现的正则表达式
{M,N}匹配M~N次前面出现的正则表达式
[…]匹配字符集的任意单个字符
[…x-y…]匹配x-y范围中的任意单个字符
[^…]取反,不匹配字符集出现的任意一个字符
(*|+|?|{})?用于匹配上面频繁出现/重复出现符号的非贪婪版本(*、+、?、{})
(…)匹配封闭的正则表达,另存为子组
 ------------------------------------------------特殊字符------------------------------------------------
\d匹配任意十进制数字,即[0-9](\D与\d相反,不匹配任何数值型的数字)
\w匹配任何字母数字字符,即[A-Za-z0-9_](\W与\w相反)
\s匹配任何空格字符,即[\n\r\t\v\f] (\S与\s相反)
\b匹配任何单词边界
\N匹配已保存的子组
\c逐字匹配任何特殊字符c(仅按字面意义匹配)
\A(\Z)匹配字符串的起始(结束)

圆括号指定分组

  • 对正则表达式进行分组
  • 匹配子组

换位

f = re.sub(r'(w+)(\.)(.*)',r'\3\2\1',
'''
www.baidu.com.cn
www.csdn.net
http://google.com.cn
''')
f = re.sub(r'(?P<name1>w+)(?P<name2>\.)(?P<name3>.*)','\g<name3>aa\g<name2>\g<name3>',
'''
www.baidu.com.cn
www.csdn.net
http://google.com.cn
''')

执行结果:

baidu.com.cn.www
csdn.net.www
http://google.com.cn

子组复用

f = re.sub(r'(?P<name1>w+)(?P<name2>\.)(?P<name3>.*?)(?P=name2)','sub--',
'''
www.baidu.com.cn
www.csdn.net
http://google.com.cn
''')

执行结果:

sub--com.cn
sub--net
http://google.com.cn

扩展表示法

正则表达式的扩展表示法,以问号开始 (?...) ,通常用于在判断前提供标记,实现一个前视、后视匹配或条件检查。
在正则表达式中圆括号指定分组,但是在扩展表示法中只有 (?P<name>) 表述一个分组匹配,其余的都没有创建分组。

      正则表达式模式解释 / 说明
(?iLmsux)指定一个或多个标记,而非通过compile()或其他re模块函数。
(?(1)y|x)条件正则匹配,类似于三目运算符,如果匹配组1(\1)存在,则与y匹配,否则,与x匹配。
(?i)表示 re.I/IGNORECASE,忽略大小写;
(?L)LOCALE, 字符集本地化。这个功能是为了支持多语言版本的字符集使用环境的,比如在转义符\w,在英文环境下,它代表[a-zA-Z0-9_],即所以英文字符和数字。如果在一个法语环境下使用,缺省设置下,不能匹配"é" 或 “ç”。加上这L选项和就可以匹配了。不过这个对于中文环境似乎没有什么用,它仍然不能匹配中文字符
(?m)表示 re.M/MULTILINE,实现多行混合,data 数据多行;
(?s)表示符号 . 可以代表任意符号(正常情况符号 . 表示除 \n 之外的任意符号);
(?u)UNICODE,使用 \w, \W, \b, \B 这些元字符时将按照 UNICODE 定义的属性.
(?x)表示允许用户通过抑制在正则表达式中使用空白符(除了在字符类中或者反斜线转义中)来创建更易读的正则表达式,正则表达式多行;
(?=…)对目标字符串实现前视匹配,且过滤掉该表达式(?=…) 匹配的值。
(?!..)对目标字符串实现负向前视匹配,与(?=…)相反。
(?<=…)对目标字符串实现后视匹配。
(?<!..)对目标字符串实现负向后视匹配。

前视匹配

re.findall(r'\w+(?=.com)', 
'''
	www.baidu.com
	csdn.net
	http://www.google.com
''')

执行结果

['www.baidu', 'http://www.google']

(?=.com) 字符串后跟着.com,才做匹配,且过滤掉.com

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值