【问题标题】:python returning a strangely formatted string [duplicate]python返回一个格式奇怪的字符串[重复]
【发布时间】:2021-02-17 09:45:39
【问题描述】:

我正在尝试编辑 Python 模块,但我没有从变量中获得我期望的值。代码是:

    def populate_ipv4_interfaces(self, data):
    for key, value in data.items():
        vrf = re.findall(r'VPN Routing/Forwarding "(.+)"', value)

我期望输出一个字符串值。它确实包含我的字符串,但还有其他内容。当我强制它成为这样的字符串时:

vrf = str(re.findall(r'VPN Routing/Forwarding "(.+)"', value))

给我值“[u'Internet']”而不是“Internet”。

我查看了 u,我意识到这表示一个 unicode 字符,但我不知道为什么它会将这些信息与字符串一起提取。

如果有帮助,这是一个 ansible 模块,但我已将其缩小到这个变量,因为如果我在事实中指定一个字符串而不是这个变量,一切都会按预期工作。

谁能告诉我为什么我会看到这种行为?

【问题讨论】:

标签: python ansible python-2.x


【解决方案1】:

re.findall 返回结果列表 - 即使只有一个结果。

而且 unicode 字符串仍然是字符串。对于所有用途,它的行为应该相同。

所以你要找的结果是:

vrf = re.findall(r'VPN Routing/Forwarding "(.+)"', value)[0]

不要在结果上直接使用str

【讨论】:

    【解决方案2】:

    re.findall() 返回一个列表,因此使用连接来获取它们:

    vrf = ' '.join(re.findall(r'VPN Routing/Forwarding "(.+)"', value))
    

    其他方式使用列表索引来获取第一项:

    vrf = re.findall(r'VPN Routing/Forwarding "(.+)"', value)[0]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 2014-02-28
      • 2023-04-05
      • 2013-03-05
      • 1970-01-01
      • 2019-01-07
      • 2019-11-14
      相关资源
      最近更新 更多