如何捕获与此正则表达式模式匹配的所有子字符串,它基于连续 2 次或更多次的重复范围?

问题描述 投票:0回答:1
import re

input_text = "((PERS)Marcos) ssdsdsd sdsdsdsd sdsdsd le ((VERB)empujé) hasta ((VERB)dejarle) en ese lugar. A ((PERS)Marcos) le ((VERB)dijeron) y luego le ((VERB)ayudo)"

input_text = re.sub(r"\(\(PERS\)((?:\w\s*)+)\)\s*((?!el)\w+\s+){2,}(le)",
                    lambda m: print(f"{m[2]}"),
                    input_text, flags = re.IGNORECASE)

print(repr(input_text)) # --> output

在这里,我使用了重复量词,例如

+
(一次或多次重复)或
*
(零次或多次重复),结合
{}
来指定重复范围。

为什么这段代码给我作为输出,只有第一个词而不是模式

((?!el)\w+\s+){2,}
将涵盖的所有可能的词。由于此模式捕获
"((PERS) )"
"el"
之间是否有 2 个或更多单词 ?

"sdsdsd "

而不是这个输出,这是我想要得到的

" ssdsdsd sdsdsdsd sdsdsd "

打印捕获组 2 时如何修复我的正则表达式以获得此结果?

python python-3.x regex replace regex-group
1个回答
1
投票

将整个部分(

\s*((?!el)\w+\s+){2,}
)包裹到一个捕获组中。

m = re.search(r"\(\(PERS\)((?:\w\s*)+)\)(\s*((?!el)\w+\s+){2,})(le)",
                    input_text, flags=re.IGNORECASE)
print(m.group(2))
© www.soinside.com 2019 - 2024. All rights reserved.