Python关于芬德尔()变量B除外

2024-10-03 04:35:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我不经常使用正则表达式,我有一个罕见的例子,下面将介绍。我想用关于芬德尔()命令输出。[用于在远程主机上运行命令的pexcept]

root@test# cinder image-metadata-show 9a4d222b-a6f2-4ddc-a1ce-9a635335a4b4 | grep 'image_id' | cut -d '|' -f3 46519bdf-3ae9-44e2-acce-bd1ac76fd523

我正在尝试获取46519bdf-3ae9-44e2-acce-bd1ac76fd523关于芬德尔()但问题是关于芬德尔甚至在命令中也是匹配的。我的最终输出如下

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']

我该怎么做?我遇到了再逃逸()和使用“负面展望”时,不太清楚如何使用再逃逸以及关于芬德尔()一起。任何建议都将不胜感激。你知道吗

短暂性脑缺血发作


Tags: image命令reidoutput远程show例子
3条回答

您可以使用负前瞻模式:

re.findall(r"(?!%s)(\w+-\w+-\w+-\w+-\w+)" % vol_id, volume_show)

可以在正则表达式的开头添加字符,以匹配行首和换行符。 下面是对表达式的一个修改,它匹配一行开始符^或换行符\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'] 

你不能做一些后期处理吗?就像

output = [x for x in output if x != vol_id]

相关问题 更多 >