Python正则表达式实例详解(2)

字符* --> 字符出现0次或者多次

# 匹配0位或者多位的数字字符串 re_str = r'\d*' print(fullmatch(re_str, '123')) # 用一个正则表达式来检测一个标识符是否符合要求:数字字母下划线组成,数字不开头(位数至少1位) re_str = r'[a-zA-Z_]\w*' print(fullmatch(re_str, 'A')) 2. +(匹配一次或者多次) 匹配abc前面有一个或者多个数字的字符串 re_str = r'\d+abc' print(fullmatch(re_str, '9abc')) 3. ?(匹配0次或者1一次) re_str = r'a?123' print(fullmatch(re_str, 'a123')) 练习:写一个正则表达式,匹配所有的整数(123, -2334, +9...可以匹配的,012, -023,+0122不能匹配) re_str = r'[-+]?[1-9]\d*' print(fullmatch(re_str, '1234')) 4. {}(指定次数)

{N} --> 匹配N次
{M,N} --> 匹配M到N次
{M,} --> 至少匹配M次
{,N} --> 最多匹配N次

re_str = r'\d{3}' print(fullmatch(re_str, '123')) re_str = r'\d{3,}' print(fullmatch(re_str, '1234')) re_str = r'\d{,3}' print(fullmatch(re_str, '23')) re_str = r'[a-z]{2,5}' print(fullmatch(re_str, 'aajk')) # 判断密码是否符合要求:密码是由数字和字母组成,并且位数是6-16位 re_str = r'[\da-zA-Z]{6,16}' 三、分之和分组

import re

1. |(分之)

条件1|条件2 --> 先用条件1去匹配,如果匹配成功就匹配成功。如果条件1匹配失败,用条件2去匹配。
注意:如果条件1匹配成功就不会用条件2再去匹配

re_str = r'[a-z]{3}|[A-Z]{3}' print(re.fullmatch(re_str, 'AHD'))

能匹配成功时abc,d和aaa

re_str = r'abc|d|aaa' print(re.fullmatch(re_str, 'aaa'))

'abc'+W/H/Y

re_str = r'abc(W|H|Y)' print(re.fullmatch(re_str, 'abcY')) 2. ()(分组)

a.组合(将括号中的内容作为一个整体进行操作)
b.捕获 -- 使用带括号的正则表达式匹配成功后,只获取括号中的内容
c.重复 -- 在正则表达式中可以通过\数字来重复前面()中匹配到的结果。数字代表前第几个分组

a.组合

匹配一个字符串,以数字字母的组合出现3次

re_str = r'(\d[a-zA-Z]){3}' print(re.fullmatch(re_str, '2h8h7j')) b.捕获 re_str = r'(\d{3})abc' print(re.fullmatch(re_str, '773abc')) print(re.findall(re_str, 'euhasdhf873abcssjsja235abcu-03s834432abcjjsks')) c.重复 re_str = r'([a-z]{3})-(\d{2})\2' print(re.fullmatch(re_str, 'hsn-2323')) 3.转义符号

正则表达式中可以通过在特殊的符号前加\,来让特殊的符号没有意义
. --> 任意字符 . --> 字符.

--> 匹配一次或者多次 + --> 字符+

注意:在中括号有特殊功能的符号,只代表符号本身
\不管在哪儿都需要转义
-在[]外面没有特殊功能,在[]中要表示-本身,就不要放在两个字符之间
()需要转义

re_str = r'\d{2}\.\d{2}' print(re.fullmatch(re_str, '12=34')) re_str = r'\d\+\d' print(re.fullmatch(re_str, '3+7')) re_str = r'\(\\' print(re.fullmatch(re_str, '(\\')) re_str = r'(\d{3})\1([a-z]{2})\2\1' print(re.fullmatch(re_str, '123123bbbb123')) 四、re模块中的函数

import re

1. compile

compile(正则表达式字符串) --> 将正则表达式字符串转换成正则表达式对象

re_objct = re.compile(r'\d+') print(re_objct) print(re_objct.fullmatch('23738')) 2. fullmatch和match

fullmatch(正则表达式字符串, 字符串)
--> 用正则表达式去完全匹配字符串(匹配整个字符串),返回匹配对象(SRE_Match)或者None

match(正则表达式字符串, 字符串)
--> 匹配字符串开头,返回匹配对象或者None

result = re.fullmatch(r'\d([a-zA-Z]+)123', '2hjdh123') print(result) 1.span(group=0) --> 获取匹配成功的区间(左闭右开区间)

print(result.span(0))
print(result.start(1)) # 获取匹配到的开始下标
print(result.end(1)) # 获取匹配到的结束下标后的下标

2.group(group = 0) --> 获取匹配结果

group()/group(0) --> 获取正则表达式完全匹配的结果
group(index>0) --> 获取正则表达式中第group个分组匹配到的结果

print('0:',result.group()) print('1:',result.group(1)) 3.string --> 获取被匹配的原字符串 print(result.string) result = re.match(r'\d([a-zA-Z]+)123', '2hjdh123ABC') print('match:',result) 3.search

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/b28b6aceda5668de3729d2fc793c76b1.html