字符* --> 字符出现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次
import re
1. |(分之)条件1|条件2 --> 先用条件1去匹配,如果匹配成功就匹配成功。如果条件1匹配失败,用条件2去匹配。
注意:如果条件1匹配成功就不会用条件2再去匹配
能匹配成功时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.重复 -- 在正则表达式中可以通过\数字来重复前面()中匹配到的结果。数字代表前第几个分组
匹配一个字符串,以数字字母的组合出现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.转义符号正则表达式中可以通过在特殊的符号前加\,来让特殊的符号没有意义
. --> 任意字符 . --> 字符.
--> 匹配一次或者多次 + --> 字符+
注意:在中括号有特殊功能的符号,只代表符号本身
\不管在哪儿都需要转义
-在[]外面没有特殊功能,在[]中要表示-本身,就不要放在两个字符之间
()需要转义
import re
1. compilecompile(正则表达式字符串) --> 将正则表达式字符串转换成正则表达式对象
re_objct = re.compile(r'\d+') print(re_objct) print(re_objct.fullmatch('23738')) 2. fullmatch和matchfullmatch(正则表达式字符串, 字符串)
--> 用正则表达式去完全匹配字符串(匹配整个字符串),返回匹配对象(SRE_Match)或者None
match(正则表达式字符串, 字符串)
--> 匹配字符串开头,返回匹配对象或者None
print(result.span(0))
print(result.start(1)) # 获取匹配到的开始下标
print(result.end(1)) # 获取匹配到的结束下标后的下标
group()/group(0) --> 获取正则表达式完全匹配的结果
group(index>0) --> 获取正则表达式中第group个分组匹配到的结果