python正则表达式:行末尾的反向匹配
我正在使用正则表达式来匹配日志中的模式。我需要在开始时匹配模式,然后反转匹配,即: 我需要匹配这一行:python正则表达式:行末尾的反向匹配,python,regex,regex-negation,Python,Regex,Regex Negation,我正在使用正则表达式来匹配日志中的模式。我需要在开始时匹配模式,然后反转匹配,即: 我需要匹配这一行: reject: RCPT from unknown[165.231.143.153]: 450 4.7.25 from=<spameri@tiscali.it> to=<spameri@tiscali.it> reject: RCPT from unknown[165.231.143.153]: 450 4.7.25 from=<spameri@tiscali.
reject: RCPT from unknown[165.231.143.153]: 450 4.7.25 from=<spameri@tiscali.it> to=<spameri@tiscali.it>
reject: RCPT from unknown[165.231.143.153]: 450 4.7.25 from=<spameri@tiscali.it> to=<alice@mydomain.com>
在这里,我使用构造来否定mydomain.com
(?!mydomain.com)
如何做到这一点?Lookaheads是非消耗性的,即正则表达式索引保持不变,匹配的模式不会添加到总体匹配值中 因此,
(?!mydomain.com)
中的(?!mydomain.com)
检查当前位置右侧是否没有mydomain
,是否有任何字符,com
,并且下一个字符必须是
,因此总是正确的
您需要在>
之前使用字符,因此可以使用
^reject: RCPT from [A-Za-z0-9.-]+\[{ip}]: .* to=<[A-Za-z0-9._-]+@(?!mydomain\.com>)[^>]*>
^reject:RCPT从[A-Za-z0-9.-]+\[{ip}]:.*到=)[^>]*>
注意:不需要在方括号(又名字符类)内转义
,也不需要在字符类之外转义]
@(?!mydomain\.com>)[^>]*>
匹配
-一个@
字符@
-后面不紧跟(?!mydomain\.com>)
mydomain.com>
-(一种否定字符类匹配)除[^>]*
-一个
字符
^reject: RCPT from [A-Za-z0-9.-]+\[{ip}]: .* to=<[A-Za-z0-9._-]+@(?!mydomain\.com>)[^>]*>