Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python正则表达式:行末尾的反向匹配_Python_Regex_Regex Negation - Fatal编程技术网

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>)[^>]*>