鬼少 发表于 2024-11-30 22:48:38

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

>>>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为什么是表示八进制的?

FishC 发表于 2024-11-30 22:48:44

在 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 小助理,如未能正确解答您的问题,请继续追问。

鬼少 发表于 2024-11-30 23:44:14

本帖最后由 鬼少 于 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’?

FishC 发表于 2024-11-30 23:52:50

鬼少 发表于 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 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 正则表达式re.search(r'(good)\060','good')中的”\060“为什么代表八进制