python 正则表达式:在行尾反向匹配
python regex: inverse match at the end of the line
我正在使用正则表达式来匹配日志中的模式。我需要在开始时匹配模式,然后反转匹配,即:
我需要匹配这一行:
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>
基本上,如果该行包含 to=<alice@mydomain.com>
(或任何其他带有 mydomain.com
的电子邮件地址,则它不应触发匹配。否则,如果是其他内容,即 to=<bob@otherdomain.com>
, 或 to=<alice@thirddomain.com>
那么它应该匹配。
我尝试使用这种消极的前瞻模式:
'^reject: RCPT from [A-Za-z0-9\.-]+\[{ip}\]: .* to=<[A-Za-z0-9\._-]+@(?!mydomain.com)>',
我在哪里否定 mydomain.com
使用构造 (?!mydomain.com)
我该怎么做?
前瞻是非消耗性的,即正则表达式索引保持在原来的位置,匹配的模式不会添加到总体匹配值中。
因此,(?!mydomain.com)>
中的 (?!mydomain.com)
检查是否没有 mydomain
,任何字符,com
紧邻当前位置的右侧,并作为下一个char 必须是 >
,它始终为真。
你需要在>
之前消耗char,所以你可以使用
^reject: RCPT from [A-Za-z0-9.-]+\[{ip}]: .* to=<[A-Za-z0-9._-]+@(?!mydomain\.com>)[^>]*>
请注意,您不需要在方括号(又名字符 class)内转义 .
,并且当 ]
不在字符 [= 内时,您也不需要转义 ]
48=].
@(?!mydomain\.com>)[^>]*>
匹配
@
- 一个 @
字符
(?!mydomain\.com>)
- 没有紧接着 mydomain.com>
[^>]*
-(否定字符 class 匹配)除 >
之外的任何零个或多个字符
>
- 一个 >
字符。
我正在使用正则表达式来匹配日志中的模式。我需要在开始时匹配模式,然后反转匹配,即:
我需要匹配这一行:
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>
基本上,如果该行包含 to=<alice@mydomain.com>
(或任何其他带有 mydomain.com
的电子邮件地址,则它不应触发匹配。否则,如果是其他内容,即 to=<bob@otherdomain.com>
, 或 to=<alice@thirddomain.com>
那么它应该匹配。
我尝试使用这种消极的前瞻模式:
'^reject: RCPT from [A-Za-z0-9\.-]+\[{ip}\]: .* to=<[A-Za-z0-9\._-]+@(?!mydomain.com)>',
我在哪里否定 mydomain.com
使用构造 (?!mydomain.com)
我该怎么做?
前瞻是非消耗性的,即正则表达式索引保持在原来的位置,匹配的模式不会添加到总体匹配值中。
因此,(?!mydomain.com)>
中的 (?!mydomain.com)
检查是否没有 mydomain
,任何字符,com
紧邻当前位置的右侧,并作为下一个char 必须是 >
,它始终为真。
你需要在>
之前消耗char,所以你可以使用
^reject: RCPT from [A-Za-z0-9.-]+\[{ip}]: .* to=<[A-Za-z0-9._-]+@(?!mydomain\.com>)[^>]*>
请注意,您不需要在方括号(又名字符 class)内转义 .
,并且当 ]
不在字符 [= 内时,您也不需要转义 ]
48=].
@(?!mydomain\.com>)[^>]*>
匹配
@
- 一个@
字符(?!mydomain\.com>)
- 没有紧接着mydomain.com>
[^>]*
-(否定字符 class 匹配)除>
之外的任何零个或多个字符
>
- 一个>
字符。