用正则表达式查找不在句子开头的大写字母单词



使用Python和regex,我试图在一段文本中找到以大写字母开头但不在句子开头的单词。

我能想到的最好的方法是检查单词前面是否没有句号,然后是空格。我很确定我需要使用负向后看。这就是我到目前为止所拥有的,它会运行,但总是一无所获:

(?<!.s)b[A-Z][a-z]*b

我认为问题可能是在单词boundary\b中使用[A-Z][A-Z]*,但我真的不确定。

谢谢你的帮助。

您的正则表达式似乎可以工作:

In [6]: import re
In [7]: re.findall(r'(?<!.s)b[A-Z][a-z]*b', 'lookbehind. This is what I have')
Out[7]: ['I']

在指定正则表达式时,请确保使用的是原始字符串(r'...')。

如果您有一些regex不起作用的特定输入,请将它们添加到您的问题中。

尽管您特别要求正则表达式,但考虑列表理解可能会很有趣。它们有时可读性更强(尽管在这种情况下,可能会以效率为代价)。以下是实现这一目标的一种方法:

import string
S = "T'was brillig, and the slithy Toves were gyring and gimbling in the " + 
    "Wabe. All mimsy were the Borogoves, and the Mome Raths outgrabe."
LS = S.split(' ')
words = [x for (pre,x) in zip(['.']+LS, LS+[' '])
    if (x[0] in string.uppercase) and (pre[-1] != '.')]

尝试使用循环输入

(?!^)b([A-Z]w+)

并捕获第一组。正如你所看到的,负面前瞻也可以使用,因为你想要匹配的位置除了线的开始之外什么都不是。消极的回头看也会产生同样的效果。

最新更新