统计特定子串区域内小写字母占比超50%的区块数量
解决思路与实现方案
首先,咱们得先把字符串里的每个独立区块提取出来——这正是你当前缺的关键步骤,毕竟你已经懂整串统计的逻辑,只要把每个目标区域单独拆分出来,剩下的就好办了。
步骤拆解:
- 第一步:拆分独立区块:用正则表达式精准匹配所有符合「数字开头 + 字母内容 + >结尾」的区块,把每个目标区域单独拎出来。
- 第二步:清理区块内容:去掉每个区块开头的数字和结尾的
>,只保留中间的纯字母部分,方便后续统计。 - 第三步:统计大小写并判断:对每个字母片段,分别统计大写、小写字母的数量,判断小写数量是否严格多于大写。
- 第四步:计数符合条件的区块:遍历所有区块,累加满足「小写字母数 > 大写字母数」的区块数量。
代码实现(Python)
import re # 你的目标字符串(补全了第三个区块的>,确保符合规则) input_str = "1AAAAaaa>###_1BBbbbbbbb>###_2CCCCCCCCccccc>" # 1. 提取所有符合规则的区块:数字开头 + 字母内容 + >结尾 blocks = re.findall(r'\d[A-Za-z]+>', input_str) satisfy_count = 0 for block in blocks: # 2. 清理区块:去掉开头的数字和结尾的>,得到纯字母串 pure_letters = block[1:-1] # 3. 统计大小写字母数量 upper_num = sum(1 for c in pure_letters if c.isupper()) lower_num = sum(1 for c in pure_letters if c.islower()) # 4. 判断并计数 if lower_num > upper_num: satisfy_count += 1 print(f"满足条件的区块个数:{satisfy_count}")
代码细节说明:
- 正则表达式
r'\d[A-Za-z]+>':\d匹配开头的数字,[A-Za-z]+匹配中间至少一个字母,>匹配结尾符号,刚好精准抓取每个独立区块。 - 清理区块时用
block[1:-1]切片,直接去掉第一个字符(数字)和最后一个字符(>),简单高效。 - 统计大小写用生成器表达式,写法简洁且性能稳定。
拿你的示例字符串测试:
- 第一个区块
1AAAAaaa>:字母是AAAAaaa,大写4个,小写3个 → 不满足 - 第二个区块
1BBbbbbbbb>:字母是BBbbbbbbb,大写2个,小写7个 → 满足 - 第三个区块
2CCCCCCCCccccc>:字母是CCCCCCCCccccc,大写8个,小写5个 → 不满足
最终统计结果为1,符合预期。
内容的提问来源于stack exchange,提问作者mrkvmz
相关产品推荐
相关产品推荐

