2016-03-25 69 views
0

我想編寫一個匹配單詞hello的正則表達式,但僅當它開始一行或以空格開頭時。我不想匹配空白,如果它有...我只需要知道它(或行的開始)在那裏。Python正則表達式匹配前面有行首或空白的模式

所以我已經試過:

r = re.compile('hello(?<=\s|^)') 

但這拋出:

error: look-behind requires fixed-width pattern 

舉一個例子的緣故,如果要搜索我的字符串是:

s = 'hello world hello thello' 

那麼我想我的正則表達式匹配兩次...在大寫以下位置:

'HELLO world HELLO thello' 

其中第一個匹配,因爲它在該行的開始之前,而第二個匹配是因爲它之前是空格。最後5個字符不匹配,因爲它們前面有t

+2

只是're.findall(r'\ bhello \ b',s)''? –

+0

爲什麼這個工作,如果你寫,因爲你有,但失敗,如果你在正則表達式字符串之前省略'r'? – 8one6

+0

沒有'r','\ b'被視爲退格符號。 –

回答

3

(?:(?<=\s)|^)hello將是你想要的。後視需要在正則表達的開始;它的確必須是固定的寬度 - \s是1個字符寬,而^是0個字符,所以你不能將它們與|合併。在這種情況下,我們不需要,我們只是替代(?<=\s)^

請注意,這兩者仍然會匹配hello oo;如果這是不可接受的,你必須在最後添加\b