鱼C论坛

 找回密码
 立即注册
查看: 1198|回复: 2

[已解决]关于正则表达式的问题

[复制链接]
发表于 2019-2-19 21:22:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
>>> p = re.compile(r'(\b\w+)\s+\1')
>>> p.search('Paris in the the spring').group()

为什么这个的答案是'the the'?


>>> m = re.match("([abc])+", "abc")
>>> m.groups()


为什么这个的答案是('c',)
最佳答案
2019-2-19 22:18:39
本帖最后由 °蓝鲤歌蓝 于 2019-2-19 22:20 编辑

第一个问题:
  1. 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。
注意:
  1. p = re.compile(r'(\b\w+)\s+\1')
复制代码
不等价于
  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',)。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-2-19 22:18:39 | 显示全部楼层    本楼为最佳答案   
本帖最后由 °蓝鲤歌蓝 于 2019-2-19 22:20 编辑

第一个问题:
  1. 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。
注意:
  1. p = re.compile(r'(\b\w+)\s+\1')
复制代码
不等价于
  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',)。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-19 22:39:42 | 显示全部楼层
\1匹配第一个捕获子组,所以是2个the

2问同上
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-4-2 02:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表