找到所有单词:正则表达式中的负面看法

时间:2017-04-14 13:31:40

标签: python regex python-2.7

我目前正在使用Python 2.7(我正在使用我的一些旧代码)。我试图通过正则表达式获取所有单词,我可以忽略带有撇号的单词,例如can'tGary's。到目前为止,我已经将字符串中的所有字母都设为小写,这是我现在的正则表达式:

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

我收到以下错误:

  

引发错误,v#无效表达

     

错误:后视需要固定宽度模式

我也尝试过:

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

但是,正如您在Regex101上看到的那样,它并没有抓住最后一个字。

我知道这样做可能有更好的选择,但现在我真的很好奇如何在这种情况下做出负面看法。但是,如果您能够解释并提供更好的解决方案,那就没关系了。

1 个答案:

答案 0 :(得分:2)

在这种情况下,只需使用带有相反字符类\S的负向lookbehind(与前瞻相同):

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

请参阅regex demo

“积极”的做法看起来不那么漂亮:

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

another regex demo(?:(?<=\s)|^)非捕获组结合了2个零宽度断言备选方案,(?<=\s)需要在当前位置之前有空格,而^则匹配字符串的开头。