我在Python中有一个正则表达式,它应该删除所有出现的单词“NOTE.”和下面的句子,我怎样才能正确地做到这一点,并返回所有被删除的句子呢?
import re
text = "NOTE. This is the subsequent sentence to be removed. The weather is good. NOTE. This is another subsequent sentence to be removed. The sky is blue. Note that it's a dummy text."
clean_text = re.sub("NOTE\..*?(?=\.)", "", text)
预期成果:
清除文本:
The weather is good. The sky is blue. Note that it's a dummy text.
删除的唯一语句:
["This is the subsequent sentence to be removed.", "This is another subsequent sentence to be removed."]
3条答案
按热度按时间v1uwarro1#
窃取The fourth bird's正则表达式,但使用
re.split
,所以我们只需要搜索一次。它返回一个列表,在不匹配和匹配部分之间交替。连接前者以获得文本,后者是您的删除。输出:
Demo
lmyy7pcs2#
删除NOTE部分的一个选择是使用一个模式,该模式也匹配下一行后面的点,后跟可选的空格字符,而不是只Assert点。
如果将捕获组添加到模式中,则可以使用具有相同模式的re. findall返回捕获组值。
模式匹配:
\bNOTE\.\s*
匹配单词NOTE
,后跟.
和可选的空白字符([^.]*\.)
捕获组1,匹配.
以外的可选字符,然后匹配.
\s*
匹配可选空白字符请参阅此regex101 demo和一个Python demo中的匹配项和捕获组值。
产出
zbq4xfa03#
您可以使用替换函数一次性捕获删除的句子,该函数的副作用是保存删除的句子:
输出: