如何一次性存储和删除正则表达式模式?

3

我想知道是否可以在不检查正则表达式模式两次的情况下实现这一点。

我正在使用Python 3。

pp = re.search(r'(.)(.+)\1(.+)', word)
word = re.sub(r'(.)(.+)\1(.+)', '', word)
salv = pp.groups()
word + = salv[0] + salv[0] + inverse(salv[1]) + salv[2]

首先我查找匹配项,然后删除这些匹配项,但是我要两次查找相同的正则表达式模式。我认为可以用其他方法实现。

所以我的目标是:

匹配一个模式,删除该模式,并以不同的方式将匹配内容连接起来。


3
你能提供一个样例输入和预期输出吗? - chepner
我只想删除模式并将其匹配的内容存储在某个地方。如果我能够删除正则表达式对象就好了……因为“re.search”返回一个对象。 - Azazel
2
那么对我的问题的回答是“不”吗? - chepner
我不知道你想要什么样的示例。 - Azazel
2
我认为这很明显:word的典型值是什么,word的结果值应该是什么? - chepner
输入:mmabacbc 输出:mmaaBcbc。就像我说的,我认为这没有什么用处。 - Azazel
2个回答

0
你可以修改你的正则表达式模式,以便在不需要额外步骤的情况下返回你要查找的内容:
#  here we unpack the object, into the first group and the rest
#   |                  here we match anything else and add to first group
#   v                                  v
word_replacement, *slav = re.search(r'(.*)(.)(.+)\1(.+)', word)
# now everything is set up the same
word_replacement += slav[0] + slav[0] + inverse(slav[1]) + slav[2]

你也可以使用带有 \g<group> 标签的 re.sub

word_replacement = re.sub('(.)(.+)\1(.+)', '\g<1>\g<1>\g<2>\g<3>', word)

不确定如何在正则表达式中实现反向操作。


反转只需使用word[::-1].swapcase() - Azazel

0
你可以在 re.sub 方法中使用函数作为它的 repl 参数的值。
import re
word = 'mmabacbc'
print(re.sub(r'(.)(.+)\1(.+)', lambda m: m.group(1) * 2 + m.group(2).swapcase() + m.group(3), word))

输出:

mmaaBcbc

使用Rextester在线测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接