鱼C论坛

 找回密码
 立即注册
查看: 41|回复: 3

[技术交流] 正则表达式re.search(r'(good)\060','good')中的”\060“为什么代表八进制

[复制链接]
发表于 前天 22:48 | 显示全部楼层 |阅读模式

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

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

x
>>>import re

>>>re.search(r'(good)\060','good')
>>>re.search(r'(good)\060','good0')
>>><re.Match object; span=(0, 5), match='good0'>

问题:
”r'(good)\060'“ 正则表达式中的'\060' 第一个0为什么是表示八进制的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 前天 22:48 | 显示全部楼层
在 Python 中,正则表达式中的反斜杠 `\` 后面可以跟数字,这通常用于表示字符的 ASCII 编码。当以零开头时,`\0` 后接数字是按八进制来解释的。

在你的正则表达式 `r'(good)\060'` 中:

- `\060` :这里的 `060` 是一个八进制数,转换为十进制正好是 48,对应的 ASCII 字符是 `'0'`。

因此,`\060` 等价于字符 `'0'`,所以 `r'(good)\060'` 等价于匹配 `'good0'`。
>>> import re
>>> re.search(r'(good)\060', 'good')  # 不匹配,因为少了 '0'
>>> re.search(r'(good)\060', 'good0')  # 匹配

这样应该能帮助你理解八进制在正则表达式中的用法。

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

使用道具 举报

 楼主| 发表于 前天 23:44 | 显示全部楼层
本帖最后由 鬼少 于 2024-11-30 23:45 编辑
FishC 发表于 2024-11-30 22:48
在 Python 中,正则表达式中的反斜杠 `\` 后面可以跟数字,这通常用于表示字符的 ASCII 编码。当以零开头时 ...


对于如下的正则表达式:
>>>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’  ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 前天 23:52 | 显示全部楼层
鬼少 发表于 2024-11-30 23:44
对于如下的正则表达式:
>>>re.search(r'(.+) \1','g ...


在你的正则表达式 `r'(.+) \1'` 中:

- `(.+)`:这是一个捕获组,用于捕获至少一个字符。`.+` 会尽可能地多匹配(贪婪匹配)。
- `\1`:这是一个反向引用,匹配的是捕获组 `(.+)` 中的内容。

在 `re.search(r'(.+) \1', 'goog goof')` 中:

1. `(.+)` 会匹配尽可能多的字符,在这个例子中,它会首先尝试匹配 `'goog'`。
2. 然后, `\1` 试图匹配一个空格后面同样的字符。
3. 对于字符串 `'goog goof'`,没有找到合适的匹配。

为了了解返回的结果,原来没有匹配成功的情况下不会返回任何东西,因此 `'g g'` 不应该是`re.search(r'(.+) \1','goog goof')` 的输出。

不过,如果你发现系统行为存在异常,可以通过以下方式获取实际匹配的内容:
match = re.search(r'(.+) \1', 'goog goof')
if match:
    print(match.group())
else:
    print("No match")

在 `re.search(r'(.+) \1', 'goog goog')` 中:

1. `(.+)` 匹配 `'goog'`。
2. `\1` 检查 `(.+)` 捕获的内容,发现 `'goog'`,匹配成功。

因此,`re.search(r'(.+) \1', 'goog goog')` 会匹配成功,返回 `'goog goog'`。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-2 18:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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