正则式需要匹配不定长的字符串,那就一定需要表示重复的指示符。Python的正则式表示重复的功能很丰富灵活。重复规则的一般的形式是在一条字符规则后面紧跟一个表示重复次数的规则,已表明需要重复前面的规则一定的次数。重复规则有:
表示匹配前面的规则0次或多次。
表示匹配前面的规则至少1次,可以多次匹配
例:匹配以下字符串中的前一部分是字母,后一部分是数字或没有的变量名字
>>> s = ‘ aaa bbb111 cc22cc 33dd ‘ >>> re.findall( r’\b[a-z]+\d*\b’ , s ) #必须至少1个字母开头,以连续数字结尾或没有数字 ['aaa', 'bbb111']
注意上例中规则前后加了表示单词边界的’\b’指示符,如果不加的话结果就会变成:
>>> re.findall( r’[a-z]+\d*’ , s ) ['aaa', 'bbb111', 'cc22', 'cc', 'dd'] #把单词给拆开了
大多数情况下这不是我们期望的结果。
只匹配前面的规则0次或1次。
例,匹配一个数字,这个数字可以是一个整数,也可以是一个科学计数法记录的数字,比如123和10e3都是正确的数字。
>>> s = ‘ 123 10e3 20e4e4 30ee5 ‘ >>> re.findall( r’ \b\d+[eE]?\d*\b’ , s ) ['123', '10e3']
它正确匹配了123和10e3,正是我们期望的。注意前后的’\b’的使用,否则将得到不期望的结果。