在 Windows 和 Linux 上的正则表达式结果之间获得不同的行为

Getting different behavior between regex results on Windows vs Linux

我正在运行使用以下正则表达式来提取字符串中 @ 字符前后的值。

re.search(r'\S+ @ \S+(?=\n)', output).group().split(' @ ')

示例字符串如下所示:

1
1.1
2.2
2.2.2
20 @ 0xffffffff
SUCCESS

我已经在两种环境的 Python 控制台中对此进行了测试,它按我的预期运行。

我 运行 遇到的问题是当我 运行 我的鼻子在 Windows 上测试时,我在那条线上收到 AttributeError: 'NoneType' object has no attribute 'group' 错误。然而,当 运行 在 Linux 上进行鼻子测试时,这不会发生。

你有一个问题,因为你有 \n 作为换行符。在Windows中,需要指定\r\n。因此,要同时支持 Windows 和 Linux 环境,请使用

r'\S+ @ \S+(?=\r?\n)'

此外,您应该在访问 .group() 之前检查是否存在匹配项。