我可以使用什么正则表达式检查单词中是否有过多的大写字母? e.g。
AAAApples
该计划应与AAAApples
匹配,因为一开始就有太多大写字母,并使用re.sub
,将其替换为空字符串以留下Apples
因此,使用正则表达式:r'^[A-Z]*[a-z]'
找到大写字母,并检查下一个是小写字母。然后我用空字符串替换它,以删除大写字母。但当然,这也会删除'Ap',留下'ples'。
我需要对正则表达式做些什么来解决这个问题?
答案 0 :(得分:4)
使用捕获组获取额外大写之后的字母。
re.sub(r'^[A-Z]+([A-Z][a-z])', r'\1', string)
这匹配大写字母序列,后跟大写字母和小写字母。括号使得最后两个字母的匹配放在捕获组中。替换\1
替换为第一个捕获组的内容。
或者您可以使用前瞻:
re.sub(r'^[A-Z]+(?=[A-Z][a-z])', '', string)
前瞻指定模式仅在其后跟子模式匹配时才匹配,但该子模式不包含在匹配中。所以这匹配一系列大写字母,后面必须是大写字母,然后是小写字母。但是匹配中只包含大写字母的初始序列,然后由空字符串替换。
转到regular-expressions.info了解有关regexp的所有信息。