2017-04-14 24 views
2

我目前正在使用Python 2.7(我和我的一些舊代碼的工作)的後面。我試圖通過正則表達式來獲取所有單詞,我可以忽略帶撇號的單詞,如can'tGary's。到目前爲止,我已做了所有字母串小寫的,這裏是我當前的正則表達式:發現所有的話:負查找在正則表達式

r"(?<=\s|^)([a-z]+)(?=\s|$)" 

我收到以下錯誤:

raise error, v # invalid expression

error: look-behind requires fixed-width pattern

我也試過:

r"(?:\s|^)([a-z]+)(?=\s|$)" 

但是,正如你可以在Regex101上看到的那樣,它並不能捕捉到最後一個詞。

我知道有可能是這樣做更好的選擇,但是現在我對如何在這種情況下,後面做一個負的樣子真的很好奇。但是,如果您可以解釋並提供您自己的更好的解決方案,那就很好,並且很感激。

回答

2

在這種情況下,只需使用一個負回顧後與相對的字符類\S(同可與先行進行):

r"(?<!\S)([a-z]+)(?!\S)" 

regex demo

「陽性」 的做法看起來不那麼漂亮:

r"(?:(?<=\s)|^)([a-z]+)(?=\s|$)" 

another regex demo。所述(?:(?<=\s)|^)非捕獲組結合2零寬度斷言替代,(?<=\s)需要的當前位置之前的空白,並^,匹配串的開始。

+0

反正有沒有使用否定?如果我將來遇到類似的問題,我很好奇。 – Neil

+0

是的,但它看起來不整齊。 –

+0

如果問的不是太多,你能否偶然發佈? – Neil

相關問題