鱼C论坛

 找回密码
 立即注册
查看: 56|回复: 1

[已解决]re.search(r'(.+) \1','goog goof') 输出结果为什么不是 ‘goo goo’

[复制链接]
发表于 2024-11-30 23:48:48 | 显示全部楼层 |阅读模式

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

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

x

import re
对于如下的正则表达式:
>>>re.search(r'(.+) \1','goog goof')
>>><re.Match object; span=(3, 6), match='g g'>
>>>re.search(r'(.+) \1','goog goog')
>>><re.Match object; span=(0, 9), match='goog goog'>

疑问,其中,
re.search(r'(.+) \1','goog goof') 输出结果为什么是<re.Match object; span=(3, 6), match='g g'>, 仅输出了‘g g’, 为什么不输出‘goo goo’  ?
最佳答案
2024-11-30 23:52:44
在正则表达式 `re.search(r'(.+) \1','goog goof')` 中,`(.+)` 是一个捕获组,它会尽量匹配尽可能多的字符。因此,当它在字符串 'goog goof' 中执行匹配时:

1. `(.+)` 最初试图匹配 'goog',但是紧跟着的空格和 \1 需要匹配相同的内容。
2. 接着它尝试匹配 'goo',这样剩下的 'g' 可以和 `\1` 所引用的内容匹配。

因此,它匹配了 'goo' 和 'g',所以 `re.search` 返回的是匹配到的 'g g'。

而在 `re.search(r'(.+) \1','goog goog')` 中,`(.+)` 能够完全匹配第一个 'goog',并在第二个 'goog' 中匹配成功,因此整个匹配返回 'goog goog'。

对于正则表达式的贪婪特性,它会首先尝试匹配尽可能多的字符,除非无法满足后续的条件,这个特性导致了上述的结果。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-11-30 23:52:44 | 显示全部楼层    本楼为最佳答案   
在正则表达式 `re.search(r'(.+) \1','goog goof')` 中,`(.+)` 是一个捕获组,它会尽量匹配尽可能多的字符。因此,当它在字符串 'goog goof' 中执行匹配时:

1. `(.+)` 最初试图匹配 'goog',但是紧跟着的空格和 \1 需要匹配相同的内容。
2. 接着它尝试匹配 'goo',这样剩下的 'g' 可以和 `\1` 所引用的内容匹配。

因此,它匹配了 'goo' 和 'g',所以 `re.search` 返回的是匹配到的 'g g'。

而在 `re.search(r'(.+) \1','goog goog')` 中,`(.+)` 能够完全匹配第一个 'goog',并在第二个 'goog' 中匹配成功,因此整个匹配返回 'goog goog'。

对于正则表达式的贪婪特性,它会首先尝试匹配尽可能多的字符,除非无法满足后续的条件,这个特性导致了上述的结果。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 09:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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