我正在嘗試使用python RE匹配重復的線條圖案輸入字符串:start_of_line:x第1行第2行start_of_line:y第1行第2行第3行start_of_line:z第1行基本上,我想在循環中提取字符串(每個字符串從start_of_line開始直到下一個start_of_line之前的所有字符)我可以使用for循環輕松解決此問題,但是想知道是否有python RE可以做到這一點,我盡了最大努力,但被分組部分卡住了。對我來說,最像解決方案的東西是pattern= re.compile(r"start_of_line:.*?", re.DOTALL)for match in re.findall(pattern, input_string): print "Match =", match但它打印Match = start_of_line:Match = start_of_line:Match = start_of_line:如果我進行其他任何分組操作,都將輸掉比賽。
1 回答

夢里花落0921
TA貢獻1772條經驗 獲得超6個贊
要使用正則表達式執行此操作,必須使用先行測試:
r"start_of_line:.*?(?=start_of_line|$)"
否則,由于您使用的是惰性量詞(*?
),因此您將獲得盡可能短的匹配,即之后沒有任何匹配start_of_line:
其它的辦法:
r"start_of_line:(?:[^\n]+|\n(?!start_of_line:))*"
在這里,我使用一個字符類,其中包含除換行符(\n
)之外的所有字符,該字符類重復了一次或多次。當正則表達式引擎找到換行符時,它會測試是否start_of_line:
不跟隨換行符。我將群組重復零次或多次。
該模式比第一種模式更有效,因為僅當遇到換行符時才執行前瞻(每個字符均使用vs)
添加回答
舉報
0/150
提交
取消