Python 通用匹配和替换仅知道开始和结束的任意长度模式

Python 通用匹配和替换仅知道开始和结束的任意长度模式,python,regex,wildcard,Python,Regex,Wildcard,我知道这个问题的一些变体已经被讨论过了,但它们似乎并不像以前那样普遍有效。所以这个问题 假设我有一个文本,其中多次出现以下模式: 让我们开始吧。。。废话,废话,废话。。。这就是结局,我的朋友 我想把这个图案的每一个外观都替换为 不管怎样 问题是——这个模式可以是任意长度(除了它的开始和结束),可以延伸到一行或多行,可以包含任意数量的特殊字符,包括单引号和双引号、所有类型的斜杠、HTML标记和其他诸如此类的内容 表达式必须寻找起始短语,收集它以及该短语后面的所有内容,不管需要多长时间,也不管是什么

我知道这个问题的一些变体已经被讨论过了,但它们似乎并不像以前那样普遍有效。所以这个问题

假设我有一个文本,其中多次出现以下模式:

让我们开始吧。。。废话,废话,废话。。。这就是结局,我的朋友

我想把这个图案的每一个外观都替换为

不管怎样

问题是——这个模式可以是任意长度(除了它的开始和结束),可以延伸到一行或多行,可以包含任意数量的特殊字符,包括单引号和双引号、所有类型的斜杠、HTML标记和其他诸如此类的内容

表达式必须寻找起始短语,收集它以及该短语后面的所有内容,不管需要多长时间,也不管是什么类型的“东西”,直到它遇到结束短语,也收集它并用替换字符串替换整个内容;然后再做一次,直到遇到文本的结尾


有没有一个(python)通用表达式可以完成这种工作?

这是从这里的正则表达式生成的-


你试过什么?startPattern.*endPattern是您想要的通用格式。您的意思是像
re.sub(“让我们开始吧。*我的朋友”,s,flags=re.DOTALL)
?就像@Ajaypayne那样-恐怕不行。如果你把模式改成“让我们开始吧”…等等等等等等…[新台词]还要多久?这是乔的地方,不是吗?[另一句新台词]这是终点,我的朋友。”,你会得到“没有对手,38步”。加上更新了我的答案。
# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility

import re

regex = r"Let's start(.*[\r\n])*.*my friend\."

test_str = ("Let's start! ... blah, blah, blah...\n"
    "How much longer? It's joe's place, isn't it?\n"
    "This is the end, my friend.")

subst = "Whatever."

# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 0, re.MULTILINE)

if result:
    print (result)

# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.