gpt4 book ai didi

python - 是否需要 Negative Look behind?

转载 作者:太空宇宙 更新时间:2023-11-03 13:39:06 25 4
gpt4 key购买 nike

我正在尝试获取以下文本

编辑:第二个 $::/::必须是可选的

when HTTP_REQUEST {
if { [matchclass ::USERAGENT contains $::XYZ ] or [matchclass $::USERAGENT contains $::ABC ] } { drop }
if { [matchclass $USERAGENT contains ::TEST ] } { drop }
if { [ matchclass $::useragent contains TEST ] } { drop }
return
}

看起来像这样

when HTTP_REQUEST {
if { [matchclass ::USERAGENT contains XYZ ] or [matchclass $::USERAGENT contains ABC ] } { drop }
if { [matchclass $USERAGENT contains TEST ] } { drop }
if { [ matchclass $::useragent contains TEST ] } { drop }
return
}

即从 \] 旁边的单词中删除 $::::

到目前为止我有正则表达式,

re.sub(' \$?::(?=.*\])', ' ', text)

但是这会产生,

when HTTP_REQUEST {
if { [matchclass USERAGENT contains XYZ ] or [matchclass USERAGENT contains ABC ] } { drop }
if { [matchclass $USERAGENT contains TEST ] } { drop }
if { [ matchclass useragent contains TEST ] } { drop }
return
}

有什么想法吗?还有什么是 re 方法用于匹配而不是替换。搜索/匹配还是查找?

最佳答案

您需要将贪心点匹配模式替换为 tempered greedy token :

 \$?::(?=(?:(?!\$?::)[^\]])*\])
^^^^^^^^^^^^^^^^^^^

只有当 $:::: 直到第一个 时,它才会匹配 $::]

  • (?:(?!\$?::)[^\]])* - 零个或多个 ((?:...)*)...
    • (?!\$?::)[^\]] - 非]字符([^\]] ) 不是 $:::: 序列的起点

请注意,如果您不确定在第一个 之前的最后一个 $:: 之后可以出现什么,则可以使用此正则表达式否则,r"\$?::(?=\w+ *])" 正则表达式应该适合您。

参见 regex demo

Python code :

import re
p = re.compile(r' \$?::(?=(?:(?!\$?::)[^\]])*\])')
test_str = "when HTTP_REQUEST {\n if { [matchclass $::USERAGENT contains $::XYZ ] or [matchclass $::USERAGENT contains $::ABC ] } { drop }\n if { [matchclass $USERAGENT contains ::TEST ] } { drop }\n if { [ matchclass $::useragent contains $::TEST ] } { drop }\n return \n}\n\n"
result = p.sub(" ", test_str)
print(result)

关于python - 是否需要 Negative Look behind?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34740579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com