如何在Python中省略正则表达式中间的单词?

时间:2009-09-17 23:32:36

标签: python string

我有一个这样的多行字符串:

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

我希望得到第三个'Togo'和'ACTIVE'之间的所有内容以及字符串的其余部分。我无法创建可以执行此操作的正则表达式。如果我尝试像

那样的话
reg = "(Togo^[Togo]*?)(ACTIVE.*)"

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

3 个答案:

答案 0 :(得分:1)

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

或者,如果你想匹配最后一次出现的多哥和以下出现的ACTIVE之间的字符串,并且多哥出现的次数不一定是三次,试试这个:

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

答案 1 :(得分:1)

这只匹配所需的部分:

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

前导.*贪婪,因此以下Togo会在最后一个位置匹配。捕获的部分从最后Togo开始。

在你的表达中,^[Togo]*?没有做正确的事。 ^尝试匹配行的开头,[Togo]匹配任何字符Tog。即使[^Togo]也不起作用,因为这只匹配任何非Tog的字符。

答案 2 :(得分:1)

"(Togo(?:(?!Togo).)*)(ACTIVE.*)"

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

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