07. python从入门到精通——正则表达式

正则表达式

行定位符

^:匹配行首
$:匹配行尾

元字符

.	匹配除换行符以外的任意字符
\w	匹配字母、数字、下划线或汉字
\W	匹配字母、数字、下划线或汉字以外的字符
\s	匹配任意的空白符
\b	匹配单词的开始或结束
\d	匹配数字

限定符

?	匹配前面的字符零次或一次	colou?r:匹配colour和color
+	匹配前面的字符一次或多次	go+gle:匹配的范围从gogle到goo…gle
*	匹配前面的字符零次或多次	go*gle:匹配的范围从ggle到goo…gle
{n}	匹配前面的字符n次	go{2}gle:只匹配google
{n,}	匹配前面的字符最少n次	go{2,}gle:匹配的范围从google到goo…gle
{n,m}	匹配前面的字符最少n次,最多m次	employe{0,2}:匹配employ、employe和employee

字符类

[]:匹配中括号内任意字符的字符串

排除字符

[^]:匹配不符合指定字符集中的字符串

选择字符

|:相当于或,匹配一个或另一个字符

转义字符

\

分组

()

想要使用正则表达式需要加单引号转为模式匹配
正则表达式中的特殊字符经常需要转意,可以在引号之前使用r转为元字符匹配

例
匹配m开头\结尾的字符串:
	'\\bm\\w*\\b'
	r'\bm\w*\b'

使用re模块实现正则表达式操作

(需要先导入re模块:import re)

匹配字符串:

match() :从字符串的起始处匹配,如果起始位置匹配成功就返回macth对象,否则返回none值
	语法:re.match(pattern,string,[flags])
		#pattern:正则表达式转换为的模式字符串
		#string:要进行匹配的字符串
		#[flags]:可选参数,用来指定标志位的。这个标志位主要用来控制匹配方式的:
			re.I:不区分字母大小写
			re.A:让\w不匹配汉字
	例1
	pattern = r'yy-nn-\w\w'
	string = "YY-NN-RR yy-nn-rr"
	match = re.match(pattern,string,re.I)
	print(match)
	print(match.start())	#匹配对象的起始位置
	print(match.end())	#匹配对象的结束位置
	print(match.group())	#匹配对象的值
	例2
	import re
	pattern = r'(13[4-9]\d{8})$|(15[01289]\d{8})$'
	mobile = "15032331123"
	match = re.match(pattern,mobile)
	if match == None:
	    print(str(mobile)+":不是有效的号码")
	else:
	   print(str(mobile)+":是有效的号码")
	   
search():在整个字符串中搜索第一个匹配的值,用法同match()方法

findall():在整个字符串中搜索所有匹配正则表达式的字符串,并以列表的形式显示,用法同match()
	例
	pattern = r'yy-nn-\w\w'
	string = "YY-NN-RR yy-nn-rr"
	match = re.findall(pattern,string,re.I)
	print(match)

替换字符串

sub()
	语法:re.sub(pattern, repl, string, count=0, flags=0)
		#pattern:模式匹配
		#repl:用来替换的字符串
		#string:要查找的被替换的字符穿
		#count:表示替换的最大次数,默认值为0表示替换所有
		#flags:标志位用来控制匹配方式
	例
	import re
	pattern = r'(13[4-9]\d{8})|(15[01289]\d{8})'
	mobile = "15032331123ayuikaieoQADDD23786481736864B15234524567啊啊啊啊啊"
	re.sub(pattern,"********",mobile)

使用正则表达式分割字符

re.split:用指定字符分割字符串,并返回列表	
	语法:re.split(pattern, string, maxsplit=0, flags=0)
		#pattern:匹配的分隔符
		#maxsplit:表示替换的最大次数,默认值为0表示拆分所有
	例
	import re
	pattern = r'[1a]'
	string = '15032331123ayuikaieo'
	re.split(pattern,string)

猜你喜欢

转载自blog.csdn.net/weixin_43812198/article/details/130750447