2017-04-14 51 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

相关问题