使用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'