我有一个多行字符串是这样的:如何在Python的正则表达式中省略单词?
"...Togo...Togo...Togo...ACTIVE..."
我想第三个“多哥”和“ACTIVE”和字符串的其余部分之间得到的一切。我无法创建可以做到这一点的正则表达式。如果我尝试类似
reg = "(Togo^[Togo]*?)(ACTIVE.*)"
没有捕获任何东西(捕获组需要第一个和最后一个括号)。
我有一个多行字符串是这样的:如何在Python的正则表达式中省略单词?
"...Togo...Togo...Togo...ACTIVE..."
我想第三个“多哥”和“ACTIVE”和字符串的其余部分之间得到的一切。我无法创建可以做到这一点的正则表达式。如果我尝试类似
reg = "(Togo^[Togo]*?)(ACTIVE.*)"
没有捕获任何东西(捕获组需要第一个和最后一个括号)。
这仅匹配所需的部件:
.*(Togo.*?)(ACTIVE.*)
领先.*
是贪婪的,所以在最后可能发生以下Togo
匹配。捕获的部分从最后的Togo
开始。
在你的表情^[Togo]*?
没有做正确的事情。 ^
尝试匹配行的开头,并且[Togo]
与T
,o
或g
中的任何字符匹配。即使[^Togo]
也不起作用,因为它只是匹配任何不是T
,o
或g
的字符。
reg = "Togo.*Togo.*Togo(.*)ACTIVE"
另外,如果你想多哥的最后出现,并主动下面出现时和多哥OCCURENCES数之间匹配字符串不一定三,试试这个:
reg = "Togo(([^T]|T[^o]|To[^g]|Tog[^o])*T?.?.?)ACTIVE"
"(Togo(?:(?!Togo).)*)(ACTIVE.*)"
的方括号您正则表达式形成相匹配的字符“T”中的一个,“O”,或“G”字符类。如果符号('^')不在字符类中,它与输入的开头匹配,并且可以在方括号内使用它来反转字符类。
在我的正则表达式中,在匹配单词“多哥”之后,我一次匹配一个字符,但是只有在检查它不是“多哥”的另一个实例的开始之后。 (?!Togo)
被称为negative lookahead。
呃......比我的尝试简单得多。 – 2009-09-18 01:56:25
总的来说,这似乎是最好的建议,但在我的情况下,它需要太多的时间。不过,我认为如果速度够快,这是最好的方法。 – Tony 2009-09-24 11:24:36