正则
? : [0,1] *: [0,多个] +: [1,多个] [0-9]+: 匹配多个数字 [0-9]: 匹配单个数字 ^: 为匹配输入字符串的开始位置。 $ :为匹配输入字符串的结束位置。 \w: 匹配字母数字及下划线 \d 匹配任意数字,等价于 [0-9]. r'(.*) are (.*?) .*' 1、前面的一个 r 表示字符串为非转义的原始字符串,让编译器忽略反斜杠,也就是忽略转义字符。 但是这个字符串里没有反斜杠,所以这个 r 可有可无。 2、 (.*) 第一个匹配分组,.* 代表匹配除换行符之外的所有字符。 3、 (.*?) 第二个匹配分组,.*? 后面多个问号,代表非贪婪模式,也就是说只 匹配符合条件的最少字符后面的一个 4、 .* 没有括号包围,所以不是分组,匹配效果和第一个一样,但是不计入 匹配结果中。 import re s = '1102231990xxxxxxxx' res = re.search('(?P<province>\d{3})(?P<city>\d{3})(?P<born_year>\d{4})', s) print(res.groupdict())