使用python,我需要删除多行字符串中的所有字符,直到第一次出现给定的模式。在Perl中,这可以使用正则表达式来完成,例如:

#remove all chars up to first occurrence of cat or dog or rat
$pattern = 'cat|dog|rat'
$pagetext =~ s/(.*?)($pattern)/$2/xms;

在python中最好的方法是什么?

最佳答案

您想要删除模式第一次出现之前的所有字符;例如,您给出“cat dog rat”。
使用re实现此目的的代码:

re.sub("(?s).*?(cat|dog|rat)", "\\1", input_text, 1)

或者,如果要再次使用此正则表达式:
rex= re.compile("(?s).*?(cat|dog|rat)")
result= rex.sub("\\1", input_text, 1)

注意非贪婪.*?。首字母(?s)也允许在单词匹配之前匹配换行符。
示例:
>>> input_text= "I have a dog and a cat"
>>> re.sub(".*?(cat|dog|rat)", "\\1", input_text, 1)
'dog and a cat'

>>> re.sub("(?s).*?(cat|dog|rat)", "\\1", input_text, 1)
'I have no animals!'

>>> input_text= "This is irrational"
>>> re.sub("(?s).*?(cat|dog|rat)", "\\1", input_text, 1)
'rational'

如果您只想对单词cat、dog和rat进行转换,则必须将regex更改为:
>>> re.sub(r"(?s).*?\b(cat|dog|rat)\b", "\\1", input_text, 1)
'This is irrational'

10-07 16:35