gpt4 book ai didi

python - 正则表达式:匹配最少出现字符串的模式

转载 作者:行者123 更新时间:2023-12-01 04:21:14 29 4
gpt4 key购买 nike

我试图想出一个模式来匹配包含 "::" 的字符串0 次或多次但不匹配任何带有单个 ":" 的字符串通过它自己。

例如,如果我要匹配的组是 arg"caller message: arg"arg类似于 Class::method()那么它应该匹配。我不希望它找到一个 ":"如果字符串是 "caller message1: arg1 message2: arg2"在这种情况下,我希望模式同时匹配 arg1arg2但不要混淆arg1 message: arg2作为要匹配的字符串。

所以我有类似 [^\[\]\s:]+[:{2}]+[^\[\]\s:]+|[^\[\]\s:]+ 的东西匹配 arg部分(试图找到 "::" 的 0 或 1 次出现)。
显然,我不是正则表达式专家(或正则表达式专家(或 reper);)),我很想知道这个通用版本可能是什么样子。
也就是说,我需要什么正则表达式来搜索在模式中不以任何部分形式出现的子字符串。所以如果我正在寻找 "string" ,然后 "s" , "st" , "str""string" 的任何子字符串从开头开始的(更通用的版本可能不允许任何子字符串)不能出现在匹配中。

上述正则表达式的问题在于它没有考虑 "::" 的多个实例。例如在 "Class1::method1(Class2::method2())" .

我正在寻找专门针对整个 ":" 的答案问题,但也可以随意以一般形式回答。

编辑:

tl;博士:我想匹配 Class1::method1(Class2::method2())caller message: Class1::method1(Class2::method2())或匹配除了 Class3::method3(Class4::method4())caller message1: Class1::method1(Class2::method2()) message2: Class3::method3(Class4::message4()) (单独)但模式不能匹配 Class1::method1(Class2::method2()) message2: Class3::method3(Class4::method4())
编辑2:

澄清一下:模式必须匹配 "A B: C::D()"字符串 C::D()A B: C::D() E: F::G()"字符串 C::D()F::G()但不是 C::D() E: F::G() .

我不认为我可以更清楚地了解意图以及为什么简单的 (find me anything)::(anything again)是不够的。

编辑3:

此外,从技术上讲,每个 : 之后的部分中可能有一个空格。喜欢 C::D("some text")这意味着我前面提到的正则表达式不正确,应该更像 [^\[\]:]+[:{2}]+[^\[\]:]+|[^\[\]:]+
这是我正在努力解决的真实世界(修改后的)示例:
[layer runAction: Sequence::actions(actionScale, NULL)]需要匹配layer , runActionSequence::actions(actionScale, NULL)在完整的模式中。

和这个:
[Sequence actions: DelayTime::create(1.0), CallFunc::create(this, selector(explodeCells)), NULL]必须匹配 Sequence , actionsDelayTime::create(1.0)..., NULL
和这个:
[Analytics reportEvent: GENERAL_EVENT usingID: getCurrentID() withParameter: Number::numberWithFloat(Number::defaultNumber() + 1)]必须匹配 Analytics , reportEvent , GENERAL_EVENT , usingID (可以忽略,但为简单起见也可以匹配),getCurrentID() , withParameters (也可以忽略),Number::numberWithFloat(Number::defaultNumber() + 1) .

编辑4:

我更改了 EDIT3 中的最后一个示例,以反射(reflect)我想要实现的最终目标。这是 DEMO .

最佳答案

我不确定你在找什么,但这是我想出的:
DEMO

(\S+::\S+\))

关于python - 正则表达式:匹配最少出现字符串的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33671863/

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