用正则表达式查找大写字母不在句首
问题描述:
使用Python和正则表达式我试图在一段以大写字母开头但不在句首的文本中找到单词。用正则表达式查找大写字母不在句首
我能想到的最好的方法是检查该单词是不是前面有句号,然后是空格。我很确定我需要使用负面后视。这是我到目前为止,它将运行,但始终没有返回值:
(?<!\.\s)\b[A-Z][a-z]*\b
我认为这个问题可能与使用[AZ] [AZ] *相关的字边界\ B的内部,但我真的很不确定。
感谢您的帮助。
答
你的正则表达式似乎工作:
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'...'
)。
如果你有一些正则表达式无效的特定输入,请将它们添加到你的问题中。
答
尝试和环比与你输入:
(?!^)\b([A-Z]\w+)
,并拍摄第一组。正如你所看到的那样,也可以使用负向预测,因为你想要匹配的位置是一切,只不过是行的开始。负面的负面看法会产生相同的效果。
答
虽然你特意要求一个正则表达式,但也可能考虑一个列表理解可能很有趣。它们有时更易读(尽管在这种情况下,可能是以效率为代价的)。这里有一种方法来达到这个目的:
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] != '.')]
感谢你的理解,那就是我没有使用原始字符串前缀。现在完美运作。 – egd 2012-01-05 16:30:16