gpt4 book ai didi

python - 为什么在 findall() 函数中使用 "re.I"标志会在编译的正则表达式对象上使用函数与自身使用的函数时给出不同的结果

转载 作者:行者123 更新时间:2023-12-05 01:28:25 24 4
gpt4 key购买 nike

我正在自学 Python,无法找到对此行为的解释:

当第一次编译 regex 对象并在带有 re.I 标志的已编译 regex 对象上使用 findall() 方法时,结果不同于使用 < strong>findall() 函数本身具有相同的标志。

(从 result 变量中删除 re.I 标记“修复”了结果的差异。)

import re

emails1 = re.compile(r"([A-z0-9._+-]+@[A-z0-9._+-]+\.[A-z]{2,})")
result = emails1.findall("xxx@yyy.com", re.I)
print(result)
>>>['x@yyy.com']

emails2 = re.findall(r"([A-z0-9._+-]+@[A-z0-9._+-]+\.[A-z]{2,})", "xxx@yyy.com", re.I)
print(emails2)
>>>['xxx@yyy.com']

感谢任何帮助或建议!

最佳答案

已编译正则表达式上的 findall 方法与 findall 函数具有不同的参数签名。

函数

findall(pattern, string, flags=0)

方法

findall(string, pos=0, endpos=9223372036854775807)

re.I 是一个值为 2 的枚举,因此您实际上是在要求编译后的方法从位置 2 开始,忽略第一个“xx”。

关于python - 为什么在 findall() 函数中使用 "re.I"标志会在编译的正则表达式对象上使用函数与自身使用的函数时给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68625758/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com