重新匹配通过命令行工作,但在运行脚本时失败

2024-10-02 10:28:51 发布

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

所以我有一个脚本,它通过tomcat访问日志进行解析,然后用regex模式匹配每一行。现在,如果我通过命令行运行regex(在终端上使用python3调用python3解释器),在日志的相应行上,我会得到一个匹配项,但是如果我使用相同的regex运行脚本,我会得到nada。不知道为什么。你知道吗

从命令行输出:

>>> obj = re.compile(r'''(?P<bytes_32>[a-z/\?=0-9]+)
...                      (?P<PeerS>x0a5a906a)
...                      (?P<MsTimestamp>Z([a-f0-9]+|[0-9]+))
...                      (?P<RemotePort>AB([0-9]+))
...                      (?P<RemoteIP>A([0-9\.]+){4})
...                      (?P<PeerIP>C([0-9\.]+){4})
...                      (?P<PeerPort>D[0-9]+)
...                      (?P<LocalIP>E([0-9\.]+){4})
...                      (?P<LocalPort>F[0-9]+)
...                      (?P<HostHeader>w[a-z\._0-9\-]+)
...                      (?P<ContentType>K[a-z/]+)
...                      (?P<Method>m[A-Z]+)
...                      ''', re.VERBOSE)
>>> 
>>> string = "0a5a906a57f41c6c00002ee0ffffffff/abcd/api/v1//examples/1348646x0a5a906aZ726AB46151A11.47.166.200C11.47.166.200D46151E11.47.166.200F8443wexamples-api-nobody.corp.myself.comKapplication/jsonmGET"
>>> match = obj.match(string)
>>> print(match)
<_sre.SRE_Match object; span=(0, 195), match='0a5a906a57f41c6c00002ee0ffffffff/screenr/api/v1//>

通过脚本输出:

line,obj:  0a5a906a57f41c6c00002ee0ffffffff/abcd/api/v1//examples/1348646x0a5a906aZ726AB46151A11.47.166.200C11.47.166.200D46151E11.47.166.200F8443wexamples-api-nobody.corp.myself.comKapplication/jsonmGET
 re.compile('(?P<bytes_32>[a-z/\\?=0-9]+)\n                     (?P<PeerS>x0a5a906a)\n                     (?P<MsTimestamp>Z([a-f0-9]+|[0-9]+))\n                     (?P<RemotePort>AB([0-9]+))\n                  , re.VERBOSE)
match is: None

当我对解释器和脚本使用相同的输入和模式时,为什么会有差异?你知道吗


Tags: 命令行re脚本apiobjbytesmatch解释器

热门问题