import re
input_text = "((VERB) saltar a nosotros a nosotros) a nosotros a nosotros a nosotros ((VERB)correr a nosotros) sdsdsd ((VERB) saltar a nosotros a nosotros)"
input_text = re.sub(r"\(\(VERB\)" + r"((?:\w\s*)+)" + r"\)",
lambda x: re.sub(r"(a nosotros)\s*\1+", r"\1", x.group()),
input_text)
print(input_text) # --> output
在这段代码中,我尝试删除连续重复的"a nosotros"
字符串,但前提是该字符串位于"((VERB)"
和)"
的中间,即捕获捕获组r"\(\(VERB\)" + r"((?:\w\s*)+)" + r"\)"
的字符串
以下是运行此脚本时应获得的输出:
"((VERB) saltar a nosotros) a nosotros a nosotros a nosotros ((VERB)correr a nosotros) sdsdsd ((VERB) saltar a nosotros)"
虽然我放在问题中的代码确实编辑了输入字符串,但是我应该修改什么呢?
2条答案
按热度按时间mm5n2pyu1#
您可以使用
主要模式是
\(\(VERB\)[\w\s]*\)
,它匹配((VERB)
+零个或多个单词或空白字符,然后匹配)
字符。re.sub(r"\ba nosotros(?:\s+a nosotros)*\b", "a nosotros", x.group())
部分移除匹配中的所有连续的整字a nosotros
。yquaqz182#
Python的可选正则表达式引擎模块(由Matthew巴内特开发)支持
\K
指令,该指令将报告的匹配的起始点重置为当前的字符串指针位置,并从最终匹配中丢弃任何先前使用的字符,通过使用该指令,用户可以简单地用空字符串替换字符串中的匹配。完成此操作的代码如下所示。
正则表达式可以分解如下。
〈-\()/-〉
一次匹配一个字符的负前瞻(这里是
(?:(?!\ba nosotros\b|\)).)
)技术被称为调节贪婪令牌解决方案。