我需要提取一个字符串命令输出,我想使用正则表达式从整个输出中获取一个字符串,特别是两个分隔符之间的中间字符串:
这是一个 shell 命令输出,我正在打印一个字符串__SEPARATOR__
第一个有简单的引号,最后一个没有引号:
ls -l && echo '__SEPARATOR__'rntotal 36rndrwxr-xr-x 3 VMlinux2 VMlinux2 4096 Sep 27 09:26 x1b[0mx1b[01;34mDesktopx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mDocumentsx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mDownloadsx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mMusicx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mPicturesx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mPublicx1b[0mrndrwxr-xr-x 3 VMlinux2 VMlinux2 4096 Sep 26 13:11 x1b[01;34msnapx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mTemplatesx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mVideosx1b[0mrn__SEPARATOR__rnVMlinux2@ubuntu:~$
我的正则表达式:
'__SEPARATOR__'(.*)__SEPARATOR__
所以我试图在这些分隔符之间获取中间字符串
regex = r"'__SEPARATOR__'(.*)__SEPARATOR__"
text = re.search(regex, output).group(1)
print(text)
但是我得到了一个错误:
AttributeError: 'NoneType' object has no attribute 'group'
我尝试使用简单的文本,例如:
I'm want to get the '__SEPARATOR__' middle text __SEPARATOR__ from this text
它运行良好,我也尝试删除中断线和所有其他但相同的错误。
我做错了什么?或者我可以采取哪种方法来解决这个问题?
基本上,问题是"."符号与换行符不匹配。您需要做的是使用可能的换行符or
这一点。一个(有点(完整的解决方案是这样的:
>>> regex = r"'__SEPARATOR__'((.|r|n|rn|nr)*)__SEPARATOR__"
>>> mo = re.search(regex, output)
>>> mo.group(1)
'rntotal 36rndrwxr-xr-x 3 VMlinux2 VMlinux2 4096 Sep 27 09:26 x1b[0mx1b[01;34mDesktopx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mDocumentsx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mDownloadsx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mMusicx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mPicturesx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mPublicx1b[0mrndrwxr-xr-x 3 VMlinux2 VMlinux2 4096 Sep 26 13:11 x1b[01;34msnapx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mTemplatesx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mVideosx1b[0mrn'