十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
. 匹配除换行符外的任意字符
10年积累的成都网站设计、网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有左权免费网站建设让你可以放心的选择与我们合作。
\d 匹配数字
\D 匹配非数字
\w 匹配数字字母下划线,支持中文
\W 小写w的反集
[abc] 匹配abc中任意一个
[a-f] 匹配字母a到f中的任意一个
x|y 匹配x或者y
^ 匹配字符串的开头
$ 匹配字符串的结尾
{3,5} 匹配次数,最少3个,最多5个
{3,} 至少匹配3次
* 匹配前一个字符,0次或多次
+ 匹配前一个字符,1次或多次
? 当前面不是数量表达式时,代表匹配0次或1次
举个栗子:
findall()函数的作用是匹配所有符合条件字符串,并以列表形式返回
由于.是匹配除换行符外的所有字符,{3,5} 匹配次数,最少3个,最多5个,在默认的贪婪模式下会匹配最多的字符,所以在列表中,字母a开头的字符串后面都跟了5个字符。
可以看到在非贪婪模式下,列表中的每一项都匹配最少的字符数。
从前往后,匹配到符合条件的最短的每一个字符串
边界字符:
^ 限定开头
$ 限定结尾
匹配分组:
() 提取出来的只有括号里匹配到的部分
上文中已经用到这个方法了,返回匹配到的字符串列表,如果没有匹配到的内容,则返回空列表。
flags参数是可以省略的,不省略时代表具有其他特殊的功能,如忽略大小写,忽略换行符等,re.S代表匹配时忽略换行符
re.search()和re.findall()的参数是一样的,只是返回结果不同,如果匹配到了,就返回该结果的正则表达式对象;如果没有匹配到,则返回None
使用re.search()返回匹配到的第一个字符串的正则表达式对象,找到了就会停止匹配。因此这个函数比较适合在一个大文本中找第一个出现的字符串。
若想让这个字符串展示出来,还需要借助group()函数。
举个栗子:
这个函数的作用是将正则表达式编译为一个正则表达式对象,如果要多次使用这个正则表达式的话,可以先编译,然后复用,使程序更高效一些,对这个对象继续使用.match(string)就可以显示匹配到的正则表达式对象,后续如果想要获取具体内容的话,和上面是一眼国的,直接使用group(0)就可以啦。
如果不考虑复用的话,和re.mach(pattern, string)的效果是一样的。
从运行结果也可以看出,re.match()和re.search()的区别,虽然二者都会返回匹配到的正则表达式对象,但是re.match()是从字符串的最开始位置开始匹配的,如果最开始的字符不匹配则会直接返回None;而re.search()则会一直往后找,直到找到第一个符合条件的字符串。
re.sub()函数用于替换字符串中的匹配项
举个栗子:
将所有数字替换为了一个空格。
re模块被称为正则表达式,其作用为,创建一个“规则表达式”,用于验证和查找符合规则的文本,广泛用于各种搜索引擎、账户密码的验证等。
预定义字符:
\d:匹配所有的十进制数字0-9
\D:匹配所有的非数字,包含下划线
\s:匹配所有空白字符(空格、TAB等)
\S:匹配所有非空白字符,包含下划线
\w:匹配所有字母、汉字、数字a-z A-Z 0-9
\W:匹配所有非字母、汉字、数字,包含下划线
特殊字符:
$:匹配一行的结尾(必须放在正则表达式最后面)
^:匹配一行的开头(必须放在正则表达式最前面)
*:前面的字符可以出现0次或多次(0~无限)
+:前面的字符可以出现1次或多次(1~无限)
?:变"贪婪模式"为"勉强模式",前面的字符可以出现0次或1次
.:匹配除了换行符"\n"之外的任意单个字符
|:两项都进行匹配
[ ]:代表一个集合,有如下三种情况
[abc]:能匹配其中的单个字符
[a-z0-9]:能匹配指定范围的字符,可取反(在最前面加入^)
[2-9] [1-3]:能够做组合匹配
{ }:用于标记前面的字符出现的频率,有如下情况:
{n,m}:代表前面字符最少出现n次,最多出现m次
{n,}:代表前面字符最少出现n次,最多不受限制
{,m}:代表前面字符最多出现n次,最少不受
{n}:前面的字符必须出现n次
Python通过re模块提供对正则表达式的支持。使用re的一般步骤是先使用re.compile()函数,将正则表达式的字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果(一个Match实例),最后使用Match实例获得信息,进行其他的操作。
举一个简单的例子,在寻找一个字符串中所有的英文字符:
import re
pattern = re.compile('[a-zA-Z]')
result = pattern.findall('as3SiOPdj#@23awe')
print result
# ['a', 's', 'S', 'i', 'O', 'P', 'd', 'j', 'a', 'w', 'e']