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 时如何修复我的正则表达式以获得此结果?
将整个部分(
\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))