python - Python re.findall() 除了一个变量
问题描述
没有经常使用正则表达式,我有一个罕见的情况,如下所述。我正在尝试在命令输出上使用 re.findall() 。[使用 pexcept 在远程主机上运行命令]
root@test# cinder image-metadata-show 9a4d222b-a6f2-4ddc-a1ce-9a635335a4b4 | grep 'image_id' | cut -d '|' -f3
46519bdf-3ae9-44e2-acce-bd1ac76fd523
我正在尝试使用 re.findall() 获取 46519bdf-3ae9-44e2-acce-bd1ac76fd523 但问题是 re.findall 即使在命令中也匹配。我的最终输出如下
re.findall("(\w+-\w+-\w+-\w+-\w+)", volume_show)
output:['9a4d222b-a6f2-4ddc-a1ce-9a635335a4b4', '46519bdf-3ae9-44e2-acce-bd1ac76fd523']
我想转义 9a4d222b-a6f2-4ddc-a1ce-9a635335a4b4 ,它存储在我的代码中的一个变量中。
前任:
vol_id = 9a4d222b-a6f2-4ddc-a1ce-9a635335a4b4
re.findall("(\w+-\w+-\w+-\w+-\w+)", volume_show) except vol_id
output = ['46519bdf-3ae9-44e2-acce-bd1ac76fd523']
我该怎么做?我遇到了 re.escape() 并使用“负前瞻”,不太清楚如何一起使用 re.escape 和 re.findall()。任何建议将不胜感激。
TIA
解决方案
您可以在正则表达式的开头添加字符以匹配行首和换行符。
这是您的表达式的修改,它匹配行开头^
或换行符\n
、可变数量的空格\s*
,然后是 4 组字母数字:
[\^\n]\s*(\w+-\w+-\w+-\w+-\w+)
这是它在 python 会话中的样子:
volume_show = '''root@test# cinder image-metadata-show 9a4d222b-a6f2-4ddc-a1ce-9a635335a4b4 | grep 'image_id' | cut -d '|' -f3\n 46519bdf-3ae9-44e2-acce-bd1ac76fd523\n\n'''
re.findall('[\^\n]\s*(\w+-\w+-\w+-\w+-\w+)', volume_show)
['46519bdf-3ae9-44e2-acce-bd1ac76fd523']
推荐阅读
- google-apps - 用户与许可 Google Apps 免费版
- reactjs - 重定向无法正常工作。它不断重新加载页面
- c++ - 错误:二进制表达式的操作数无效(映射使用查找函数错误)
- sql - 使用带有 group by 语句的默认列
- asp.net - ASP.NET MVC 未处理 OpenIdConnect signin-oidc 路由
- java - 如何使用修复 HBox 内 TOP_LEFT 上的菜单按钮
- docker - 如何使用融合的 docker 图像设置 kafka 集群
- python - 使用 pandas 根据特定列中的条件替换日期值
- java - 如何在 Spring 运行时从文本文件中重新加载数据
- react-native - 使用 ReactNative 和 StyledComponents 布局子组件