Python 正则表达式捕获文本,直到出现信号字

Python 正则表达式捕获文本,直到出现信号字,python,regex,Python,Regex,我试图创建一个正则表达式,它捕捉文本直到出现一个信号词。直到信号词不是第一个词,我的解决方案才能正常工作。因为我在正则表达式模块中使用python,所以代码是 new_text = regex.sub("^(?>.*\s)*?(?=SIGNALWORD)", "", text) 及 变成 SIGNALWORD blublub blublub blublub blublub blublub SIGNALWORD blabla blabla blab

我试图创建一个正则表达式,它捕捉文本直到出现一个信号词。直到信号词不是第一个词,我的解决方案才能正常工作。因为我在正则表达式模块中使用python,所以代码是

new_text = regex.sub("^(?>.*\s)*?(?=SIGNALWORD)", "", text)

变成

SIGNALWORD blublub blublub
blublub blublub blublub
SIGNALWORD blabla blabla 
blabla blabla
SIGNALWORD blabla blabla 
blabla blabla
但是如果信号字是第一个字,它就不能正常工作。及

SIGNALWORD blublub blublub
blublub blublub blublub
SIGNALWORD blabla blabla 
blabla blabla
变成

SIGNALWORD blublub blublub
blublub blublub blublub
SIGNALWORD blabla blabla 
blabla blabla
SIGNALWORD blabla blabla 
blabla blabla

如果信号词是第一个词,我希望它什么也不做。我已经使用了
regex.DOTALL
regex.MULTILINE
参数,但没有正匹配。

您可以使用负前瞻
(?!SIGNALWORD)
来断言字符串不以
SIGNALWORD
开头

import regex

text = ("blabla blabla blabla\n"
            "blabla blabla\n"
            "SIGNALWORD blublub blublub\n"
            "blublub blublub blublub\n"
            "SIGNALWORD blabla blabla \n"
            "blabla blabla")

new_text = regex.sub("^(?!SIGNALWORD)(?>.*\s)*?(?=SIGNALWORD)", "", text)
print(new_text)

查看第一个和第二个的结果。

那么,是否要将文本中的所有内容修剪到signalword?在这种情况下,可以使用
\A
将位置断言为字符串的开头:不幸的是,表达式不起作用。与其将信号字之前的位置替换为null,为什么不从信号字开始捕获呢?像
SIGNALWORD.*
re.DOTALL一样简单
就可以在上面的两个示例中捕获您想要的内容。需要任何其他附加条件?使用
regex.sub(r'^.*(?=SIGNALWORD)',,text,flags=regex.S)
Wiktor,抱歉。这仍然导致了我已经得到的相同结果。问题是,如果SIGNALWORD是第一个单词,我希望它什么也不做。你的解决方案和我的一样,切掉了这个案例的内容,这是一个很好的解决方案。也谢谢你的演示@第四bird@SteffenNeeb不客气。如果它有助于解决问题,请单击✓ 在答案的左边。如果你贴出的答案更适合你,你也可以接受自己的答案。