我目前正在使用Python 2.7(我正在使用我的一些旧代码)。我试图通过正则表达式获取所有单词,我可以忽略带有撇号的单词,例如can't
和Gary's
。到目前为止,我已经将字符串中的所有字母都设为小写,这是我现在的正则表达式:
r"(?<=\s|^)([a-z]+)(?=\s|$)"
我收到以下错误:
引发错误,v#无效表达
错误:后视需要固定宽度模式
我也尝试过:
r"(?:\s|^)([a-z]+)(?=\s|$)"
但是,正如您在Regex101上看到的那样,它并没有抓住最后一个字。
我知道这样做可能有更好的选择,但现在我真的很好奇如何在这种情况下做出负面看法。但是,如果您能够解释并提供更好的解决方案,那就没关系了。
答案 0 :(得分:2)
在这种情况下,只需使用带有相反字符类\S
的负向lookbehind(与前瞻相同):
r"(?<!\S)([a-z]+)(?!\S)"
请参阅regex demo。
“积极”的做法看起来不那么漂亮:
r"(?:(?<=\s)|^)([a-z]+)(?=\s|$)"
见another regex demo。 (?:(?<=\s)|^)
非捕获组结合了2个零宽度断言备选方案,(?<=\s)
需要在当前位置之前有空格,而^
则匹配字符串的开头。