【发布时间】:2022-01-07 18:01:21
【问题描述】:
使用 python 3.9.5,我有这个字符串
>>> t
' LICENSE INVALID\n Your license does not include module AMS version 2020.103 on this machine.\n Module AMS\n LICENSE INVALID\n Module AMS version2020.103\n Your license does not include module AMS version 2020.103 on this machine.\n Module AMS\n Module AMS version2020.103\nLICENSE INVALID\nLICENSE INVALID'
如果找到字符串“许可证无效”或“许可证不包括”之一,我想要一个返回 None 的 re;并且,如果这些字符串都不存在并且 both 字符串 '2020.103' 和 'NORMAL TERMINATION' 都存在,那么我才希望它返回匹配项。 (如果没有任何匹配项,也返回 None 。)到目前为止我有
>>> p=re.compile(r'^(?!.*LICENSE INVALID|license does not include).*(?:2020.103|NORMAL TERMINATION).*')
>>> print(p.search(s))
<re.Match object; span=(0, 8), match='2020.103'>
这是第一部分:如果“许可无效”或“许可不包括”在文本中,则返回 None。但是,我相信它正在对后两个字符串进行排他的“或”匹配。我希望它做一个“和”。当我不希望它不匹配时,它与上面匹配。我正在匹配的输出可能包含“2020.103”,无论是在失败(当我不希望我的 re 找到匹配时)还是成功(当我希望我的 re 找到匹配时)。我需要为此使用 re 以使其与我正在使用的其他人的代码相匹配。总结一下:只有当 '2020.103' 和 'NORMAL TERMINATION' 都找到了,并且没有找到 'LICENSE INVALID' 和 'license does not include' 时,才不返回 None。
【问题讨论】: