如何實現的Lua frontier pattern如何在Python中實現Lua邊界模式?
%f[set]
一個空字符串在任何位置,使得下一個字符屬於集合和前面的字符不屬於設置
?
如何實現的Lua frontier pattern如何在Python中實現Lua邊界模式?
%f[set]
一個空字符串在任何位置,使得下一個字符屬於集合和前面的字符不屬於設置
?
您可能正在尋找正常表達式中的「向前」模式。例如:
import re
s = 'there is 1more 2go 3fold'
#
pat = re.compile('(?=[12])')
for m in pat.finditer(s):
print(m.start())
產量:
9
15
從the docs:
(?= ...)如果匹配...接下來比賽,但不消耗任何字符串。 這被稱爲超前斷言(lookahead assertion)。例如,Isaac(?= Asimov)只有跟着'Asimov'纔會匹配 'Isaac'。
Contra其中一個註釋,超前表達式並不限於'固定長度字符串',至少在我理解該描述的範圍內。例如:
s = 'there is 1Fmore 1Gother 21go 3fold 3slambam'
pat = re.compile('(?=(1F|2|3sl.[mn]))')
for m in pat.finditer(s):
print(m.start(), repr(s[m.start():]))
收率:
9 '1Fmore 1Gother 21go 3fold 3slambam'
24 '21go 3fold 3slambam'
35 '3slambam'
這裏先行是用於改變長度的一個相當廣闊的子圖案,並與嵌入的通配符和它自己的子表達式。
在Python中,'(?= ...)'只支持固定長度的字符串,而邊界模式可以使用一個完整的模式,不能輕易轉換。 – abuccts
我不明白批評。增加了更新後的可變長度模式示例作爲前瞻。如果您提供了一個更具體的例子,您將嘗試匹配,我會嘗試翻譯。就我所能看到的你提供的Lua例子而言,lookahead是一個非常接近前沿模式的類比。 –
@JonathanEunice邊界模式在Lua中既是向前看又是向後看。 –
請問您能詳細解釋一下嗎?我對Lua並不十分熟悉,不能提供沒有更多信息的等效Python正則表達式。它也可能幫助我們理解你想要什麼,如果你創建了你的問題的[mcve]並展示你的嘗試。 –
你有特定的字符串,你試圖匹配?正如我上面所說,你能提供一個[mcve]嗎? –
Hi @ChristianDean我已經添加了一個鏈接到Lua wiki,它解釋了一些情況。我想找到一個統一的替代方案,而不是某種情況下的解決方案。 – abuccts