Python re.findall(),变量除外

Python re.findall(),变量除外,python,regex,Python,Regex,我没有经常使用正则表达式,我有一个罕见的例子,如下所述。我试图在命令输出上使用re.findall()。[使用pexcept在远程主机上运行命令] root@test#煤渣图像元数据显示9A4D2222B-a6f2-4ddc-a1ce-9A635A4B4 | grep‘image_id’| cut-d’|’-f3 46519bdf-3ae9-44e2-acce-bd1ac76fd523 我试图使用re.findall()获取46519bdf-3ae9-44e2-acce-bd1ac76fd52

我没有经常使用正则表达式,我有一个罕见的例子,如下所述。我试图在命令输出上使用re.findall()。[使用pexcept在远程主机上运行命令]

root@test#煤渣图像元数据显示9A4D2222B-a6f2-4ddc-a1ce-9A635A4B4 | 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-9A63535A4B4,它存储在代码中的一个变量中

例:

我怎么做?我遇到了re.escape()和使用“消极前瞻”时,不太清楚如何同时使用re.escape和re.findall()。如有任何建议,将不胜感激


TIA

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

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

您可以使用负前瞻模式:

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

volume\u show
的值是多少?volume\u show是包含子.before()的字符串[我正在使用pexcept]。所以体积显示=”root@test#煤渣图像元数据显示9a4d222b-a6f2-4ddc-a1ce-9a635335a4b4 | grep'image|id'| cut-d'|'-f3 46519bdf-3ae9-44e2-acce-bd1ac76fd523“
re.findall(r'-f3\s+(\w[\w-]*),volume| show)
是的,我能做到。但在我的例子中,代码的效率还不够高。正在查找可以使用re.findall()完成的操作。现在我自己在做后期处理。没用,只是转义了第一个字符。例如,关于findall((\w+-\w+-\w+-\w+-\w+),卷展))的输出是['9a4d222b-a6f2-4ddc-a1ce-9A65335A4B4','46519bdf-3ae9-44e2-acce-bd1ac76fd523'],其中,作为re
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']