python中的正则函数基本用法 - 包括贪心匹配和非贪心匹配 - 正则表达式基本规则

正则表达式基本规则

符号含义样例
\d代表一个数字字符r'\d\d\d':(表示要求匹配三个连续的数字字符)
\D代表一个非数字字符r'\D\D\D':(表示要求匹配三个连续的非数字字符)
\w代表一个数字、字母或下划线字符(可以理解成组成单词的字符)r'\w\w\w':(表示要求匹配三个连续的单词字符)
\W代表一个除数字、字母、下划线外的任何字符'!@#'就是一个符合r'\W\W\W'的匹配项)
\s代表一个空格符或制表符或换行符
\S代表一个除空格符、制表符、换行符外的任何字符
()分组r'(\d\d\d)-(\d\d\d\d)':(表示分成两组进行匹配,第一组是三个数字字符,第二组是四个数字字符)
?代表其前面的序列可以出现0次或1次r'Hello(Wo)?rld':(表示匹配Hello,然后wo可以没有也可以有一组,即Hellorld和HelloWorld都满足要求)
*代表其前面的序列可以出现0次或多次r'Hello(Wo)*rld':(表示中间的wo可以没有也可以有任意组,即Hellorld、HelloWorld、HelloWoWo…rld都满足要求)
+代表其前面的序列至少出现1次r'Hello(Wo)+rld':(表示匹配Hello,然后wo至少要有一次,即HelloWorld、HelloWo…World都满足要求,而Hellorld不满足)
|代表两边的模式都可以r'Hello (Hi|HI|hi)':(表示Hello Hi、Hello HI、Hello hi都满足匹配要求)
{n,m}其前面的序列匹配n~m次r'Hello(Wo){3,5}rld':(表示中间的Wo出现3,4,5次都是满足匹配要求的,只有"n,“表示0~m,z只有”,m"表示上不封顶,只有一个数字“n”,表示只能匹配n次)
[]分类字符。表示用方括号内的字符匹配当前位置的一个字符r'\w{3}[abc123]':(表示,其前面序列有三个字母、数字、下划线字符,且只能由"abc123"这6个字符组成)
-在放括号中使用,表示字符的范围r'123[a-zA-Z]':(表示,123后面的字符只能是英文字母。方括号内的字符不用转义
^在放括号中使用时,表示除方括号内分类字符意外的其他所有字符r'123[^a-zA-Z]':(表示,123后面不能是英文字母。方括号内的字符不用转义
^头匹配。在正则表达式的开始处使用,表示匹配必须发生在待查找文本的开始处r'^Hello':(表示,字符串必须以Hello开头。可以与"$"一起使用
$尾匹配。在正则表达式的最后处使用,表示匹配必须发生在待查找文本的结尾处r'\d+$':(表示,字符串必须以至少一个数字结尾。可以与"^"一起使用
.通配符。可以表示除换行外的所有字符,但只能匹配一个r'.at':(表示,at的前面可以是任意字符,即以at结尾的三字符组合)
.*表示所有文本。贪心模式r'aaa(.*)bbb':(表示由aaa开头,bbb结尾,中间是任意数量任意字符的序列。注意这个例子中并不要求整个待查序列是以aaa开头,bbb结尾的。)
.*?表示所有文本。非贪心模式r'^aaa(.*)bbb$':(表示由aaa开头,bbb结尾,中间是任意数量任意字符的序列。与上面的例子不同,这个例子中要求整个待查序列是以aaa开头,bbb结尾)

re包基本正则函数与用法

需要导入re包:
import re

函数名返回类型参数样例
re.compile(regStr)Regex对象参数1:字符串形式的正则表达式(建议使用原始字符串)regex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')
re.compile(regStr,参数2)Regex对象参数2常用方法见文章最后注意事项regex = re.compile(r'.*',re.DOTALL)
regex.search()Match对象待查找的字符串match = regex.search(r'fdhsakhfkd111-222-3333')
match.group()实际匹配的字符串0或无参:(返回整个匹配字符串);
其他:返回数字表示的匹配部分。
match.group()
match.groups()所有分组的元组同上
regex.findall()所有匹配字符串的列表(表达式有分组时返回分组的元组列表)待查找的字符串strList = regex.findall()

样例程序:

phoneNumRegex = re.compile(r'(\d\d\d)-(\d\d\d-\d\d\d\d)')
mo = phoneNumRegex.search('My number is 415-555-4242.')
mo.group(1)
mo.group(2)
mo.group(0)
mo.group()
mo.groups()

样例输出:

‘415’
‘555-4242’
‘415-555-4242’
‘415-555-4242’
(‘415’,‘555-4242’)

注意事项

1、贪心匹配和非贪心匹配

  • Python 的正则表达式默认是“贪心” 的, 这表示在有二义的情况下,它们会尽
    可能匹配最长的字符串。花括号的“非贪心” 版本匹配尽可能最短的字符串,即在
    结束的花括号后跟着一个问号。

样例程序:

>>> greedyHaRegex = re.compile(r'(Ha){3,5}')		#贪心版本返回最长匹配
>>> mo1 = greedyHaRegex.search('HaHaHaHaHa')
>>> mo1.group()
'HaHaHaHaHa'
>>> nongreedyHaRegex = re.compile(r'(Ha){3,5}?')	#非贪心版本返回最短匹配
>>> mo2 = nongreedyHaRegex.search('HaHaHaHaHa')
>>> mo2.group()
'HaHaHa'

2、re.compile(regStr,参数2)中,参数2的常用值

参数含义样例
re.DOTALL让通配符"."能匹配换行符re.compile(r".*",re.DOTALL):(能将换行符也匹配进去)
re.I字符匹配时忽略大小写re.compile(r"hello",re.I):(只要是hello,不管怎么样的大小写都匹配)
re.IGNORECASE同re.I
re.VERBOSE忽略正则表达式字符串(即regStr)中的空白和注释,以便让正则表达式可以换行见下面样例程序

样例程序:

regex = re.compile(r'''(
	(\d{3}|\(\d{3}\))? 				# area code
	(\s|-|\.)? 						# separator
	\d{3} 							# first 3 digits
	(\s|-|\.) 						# separator
	\d{4} 							# last 4 digits
	(\s*(ext|x|ext.)\s*\d{2,5})? 	# extension
	)''', re.VERBOSE)				#re.VERCASE使程序忽略参数regStr中的空格和注释

可以使用“|”将2个或3个参数同时使用,例如:

regex = re.compile('foo', re.IGNORECASE | re.DOTALL)
regex = re.compile('foo', re.IGNORECASE | re.DOTALL | re.VERBOSE)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值