本帖最后由 °蓝鲤歌蓝 于 2019-2-19 22:20 编辑
第一个问题:
- p = re.compile(r'(\b\w+)\s+\1')
复制代码
这里的 \b 其实 \b 没什么用,有没有都一样, \s 是匹配任意空白字符,这里是为了匹配空格的
这里的 \1 表示再匹配一个第一个分组((\b\w+), 括号括起来的就是一个分组)所匹配的字符串,以你这一问的字符串为例:
\s 匹配的是 the the 中间的空格,那么为何匹配的是 the the? 第一个分组最开始匹配的也是这个 Paris,为什么最后不是 Paris in 呢? 就是因为那个 \1, 按照上面所说,第一个分组如果匹配到的是 Paris ,那么那个 \1 也必须匹配 Paris, 可是后面是 in,所以匹配失败,继续往后匹配,直到匹配到 the the。
注意:
- p = re.compile(r'(\b\w+)\s+\1')
复制代码不等价于
- p = re.compile(r'(\b\w+)\s+(\b\w+)')
复制代码,这是错误的认识。
第二问:
m.groups 等价于 (m.group(1), m.group(2), ...),不知道 groups 和 group 什么意思的自行百度。
这里只有一个分组,即([abc]),所匹配的字符串是 abc ,所以 m.groups() 返回第一个分组所匹配的字符串,这个分组按顺序依次匹配到了 a、b、c,但是最后记录的是 c ,所以输出才是 ('c',)。