我想得到“开始打印x ;;;”在python中通过re.search从这个:
fv(x,y,z)开始打印x ;;;打印y ;;;返回x + y + z结束;
我试过了:begin = re.search("begin .+;;;", line)
但是这会返回以下字符串:“begin print x ;;; print y ;;;”
有什么想法吗?
答案 0 :(得分:2)
默认情况下,重复是贪婪的,这意味着它将匹配尽可能多的字符。这导致.+
向右传递第一个;;;
并匹配其余字符串,直到最后;;;
。
要防止这种情况发生,请将.+
更改为.+?
,这会使重复变为懒惰(匹配尽可能少的字符):
begin = re.search("begin .+?;;;", line)
答案 1 :(得分:1)
您需要non-greedy版本的+。默认情况下,.+
将匹配尽可能多的字符,因此它将捕获从“开始”到最后一次出现';;;'的所有内容。请改为re.search("begin .+?;;;", line)
。