python - 用于替换列表中特殊模式的 RegEx

标签 python regex python-3.x regex-lookarounds

我一直在研究一个 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

我扩展了他们提供的正则表达式并得出了这个

regex test

'lo'(?:,\s*)?|[][')(]|(?:,\s*)?'lo'

我的看法:

'lo'(?:,\s*)? - 在字符串中搜索 'lo', 并删除所有找到的内容

[][')(] - 删除所有 ][ ' )( 无论找到什么

(?:,\s*)?'lo' - 删除所有 , 'lo' 无论找到什么

这也适用于我得到的 os.getloadavg() 输出

最佳答案

不清楚你为什么生成那个看起来像列表的字符串,但你可以使用这个正则表达式,

^[^,]+,\s*|'|\]

并用空字符串删除它以获得所需的字符串。

因为你只想删除第一个逗号和它之前的所有内容,你需要 ^[^,]+,\s* 然后你还需要使用 '< 删除所有引号]\]

Regex Demo

作为替代方法,我假设您最初将元素放在列表中,您应该更喜欢使用这种不依赖于正则表达式来获得预期输出的方法。

arr = ['lo', 'ens4', 'tun0', 'tun1']
arr.remove('lo')
print(', '.join(arr))

打印你想要的输出,

ens4, tun0, tun1

关于python - 用于替换列表中特殊模式的 RegEx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56153426/

相关文章:

regex - Linux grep 如何将所有行视为正则表达式的大行?

Python函数问题

python - cron 事件的 chalice @app.schedule 语法是什么?

python - Python 中的装饰器类

regex - 为什么 sfValidatorEmail 接受重音符号?

javascript - JavaScript 中的 REGEX 替换函数 交换单词

Python 2.7 格式化字典键属性的递归调用

python - 为 django 模型自动创建数据的工具

版本检查中Python2版本设置为Python3

xml - 在 Python 中输出 os.system 并使用它在 xml 文件中创建文本节点