0
我有一個字符串:"aaadaa"
和一個子字符串:"aa"
。這裏的問題是,我想查找實際字符串中子字符串的所有開始點和結束點。答案應是對前元組的列表:Python正則表達式lookahead
(0, 1)
(1, 2)
(4, 5)
我想我不得不使用前向斷言,但我不知道怎麼做。
任何人都可以幫我嗎?
我有一個字符串:"aaadaa"
和一個子字符串:"aa"
。這裏的問題是,我想查找實際字符串中子字符串的所有開始點和結束點。答案應是對前元組的列表:Python正則表達式lookahead
(0, 1)
(1, 2)
(4, 5)
我想我不得不使用前向斷言,但我不知道怎麼做。
任何人都可以幫我嗎?
您可以匹配一個空組,如果該組後aa
比賽:
In [34]: [m.span() for m in re.finditer('(?=aa)', 'aaadaa')]
Out[34]: [(0, 0), (1, 1), (4, 4)]
然後只需要修正終點位置(應該是等於start + len('aa') - 1
):
In [35]: [(m.span()[0], m.span()[1] + 1) for m in re.finditer('(?=aa)', 'aaadaa')]
Out[35]: [(0, 1), (1, 2), (4, 5)]
我有困難在這種情況下了解前瞻。你能解釋你的答案嗎?特別是這部分邏輯(?= aa)。這到底意味着什麼,以及正則表達式引擎如何處理它。 –
@SubhayanBhattacharya,好吧,這實際上是一個[lookahead斷言](https://docs.python.org/3/library/re.html#regular-expression-syntax)。 '(?= aa)'表示「匹配一個空的組,如果'aa'匹配下一個」。您可以將模式重寫爲'()(?= aa)',其中'()'表示「空組」。 – soon