使用Regex定义主机名



我正在编写一个脚本,该脚本查看设备的主机名并基于此应用地理配置。它目前正在使用我在网上找到的脚本工作。

DEVICE_NAME = net_connect.send_command('show version')
HOSTNAME = re.search(r'(S+)suptime', DEVICE_NAME, re.M).group(1)
if re.search('ttreda.|tteu.+', HOSTNAME):
TIMEZONE = 'GMT 0 0'
SUMMERTIME = 'BST recurring'
else:
TIMEZONE = 'EST -5 0'
SUMMERTIME = 'EDT recurring'

但是我想通过使用show run | include hostname来使它更简洁一些。我发现这个搜索字符串,但失败

DEVICE_NAME = net_connect.send_command('show run | include hostname')
HOSTNAME = re.search(r'(S+)shostname', DEVICE_NAME, re.M).group(1)
print(HOSTNAME)

这会引发以下异常:

AttributeError: 'NoneType' object has no attribute 'group'

由于hostname总是出现在您需要提取的单词之前,因此您需要

match = re.search(r'hostnames+(S+)', DEVICE_NAME)
if match:
print(match.group(1))

注意,在访问group(1)值之前,最好检查是否有匹配,以避免AttributeError: 'NoneType' object has no attribute 'group'问题。

注意,您不需要re.M选项,因为它只修改正则表达式中^$锚的行为,而您的锚两者都没有。

相关内容

  • 没有找到相关文章

最新更新