我一直在研究一个 python 脚本来发布一些关于我的 pihole 的信息,但遇到了一个小问题。我似乎无法让 re.sub
像我希望的那样为我工作。
我想要完成的是获取 netifaces.interfaces()
的输出,对我来说是 ['lo', 'ens4', 'tun0', 'tun1']
并使其看起来像 ens4, tun0, tun1
我试过用
netfaces = str(netifaces.interfaces())
netfaces = re.sub('\[|\'|lo|\'|\]', '', netfaces)
但它给了我这个输出:
, ens4, tun0, tun1
编辑:
感谢@the-fourth-bird
我扩展了他们提供的正则表达式并得出了这个
'lo'(?:,\s*)?|[][')(]|(?:,\s*)?'lo'
我的看法:
'lo'(?:,\s*)?
- 在字符串中搜索 'lo',
并删除所有找到的内容
[][')(]
- 删除所有 ][
'
)(
无论找到什么
(?:,\s*)?'lo'
- 删除所有 , 'lo'
无论找到什么
这也适用于我得到的 os.getloadavg()
输出
最佳答案
不清楚你为什么生成那个看起来像列表的字符串,但你可以使用这个正则表达式,
^[^,]+,\s*|'|\]
并用空字符串删除它以获得所需的字符串。
因为你只想删除第一个逗号和它之前的所有内容,你需要 ^[^,]+,\s*
然后你还需要使用 '< 删除所有引号
和 ]
与 \]
作为替代方法,我假设您最初将元素放在列表中,您应该更喜欢使用这种不依赖于正则表达式来获得预期输出的方法。
arr = ['lo', 'ens4', 'tun0', 'tun1']
arr.remove('lo')
print(', '.join(arr))
打印你想要的输出,
ens4, tun0, tun1
关于python - 用于替换列表中特殊模式的 RegEx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56153426/