2009-09-17 69 views
0

我有一个多行字符串是这样的:如何在Python的正则表达式中省略单词?

"...Togo...Togo...Togo...ACTIVE..." 

我想第三个“多哥”和“ACTIVE”和字符串的其余部分之间得到的一切。我无法创建可以做到这一点的正则表达式。如果我尝试类似

reg = "(Togo^[Togo]*?)(ACTIVE.*)" 

没有捕获任何东西(捕获组需要第一个和最后一个括号)。

回答

1

这仅匹配所需的部件:

.*(Togo.*?)(ACTIVE.*) 

领先.*是贪婪的,所以在最后可能发生以下Togo匹配。捕获的部分从最后的Togo开始。

在你的表情^[Togo]*?没有做正确的事情。 ^尝试匹配行的开头,并且[Togo]T,og中的任何字符匹配。即使[^Togo]也不起作用,因为它只是匹配任何不是T,og的字符。

+0

呃......比我的尝试简单得多。 – 2009-09-18 01:56:25

+0

总的来说,这似乎是最好的建议,但在我的情况下,它需要太多的时间。不过,我认为如果速度够快,这是最好的方法。 – Tony 2009-09-24 11:24:36

1
reg = "Togo.*Togo.*Togo(.*)ACTIVE" 

另外,如果你想多哥的最后出现,并主动下面出现时和多哥OCCURENCES数之间匹配字符串不一定三,试试这个:

reg = "Togo(([^T]|T[^o]|To[^g]|Tog[^o])*T?.?.?)ACTIVE" 
1
"(Togo(?:(?!Togo).)*)(ACTIVE.*)" 

的方括号您正则表达式形成相匹配的字符“T”中的一个,“O”,或“G”字符类。如果符号('^')不在字符类中,它与输入的开头匹配,并且可以在方括号内使用它来反转字符类。

在我的正则表达式中,在匹配单词“多哥”之后,我一次匹配一个字符,但是只有在检查它不是“多哥”的另一个实例的开始之后。 (?!Togo)被称为negative lookahead