You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python统计字符串中的整数与非整数数量?

解决Python统计句子中整数与非整数数量的问题

问题分析

你原来的代码用\d+会把小数里的数字片段也当成独立数字(比如3.14会被拆成3和14两个匹配项),这就导致总数字数统计错误,自然没法通过相减得到正确结果。要解决这个问题,得分别精准匹配独立整数和带小数点的非整数。

实现思路

  • 整数匹配:要确保数字是独立的,不是小数的一部分,用正则(?<!\.)\b\d+\b(?!\.),意思是:
    • (?<!\.):数字前面不能有小数点
    • \b\d+\b:匹配连续的纯数字(单词边界确保不会匹配更长字符串里的数字片段)
    • (?!\.):数字后面不能有小数点
  • 非整数(小数)匹配:匹配带有小数点的数字,用正则\b\d+\.\d+\b,匹配既有整数部分又有小数部分的数字(比如3.14)

完整代码

import re

def count_numbers(entry):
    # 匹配独立整数
    integers = re.findall(r'(?<!\.)\b\d+\b(?!\.)', entry)
    num_integers = len(integers)
    # 匹配带小数点的非整数
    non_integers = re.findall(r'\b\d+\.\d+\b', entry)
    num_non_integers = len(non_integers)
    return num_integers, num_non_integers

# 测试示例
test_sentence = "In 2014 we Celebrated 3.14 with 3 whole pies"
int_count, non_int_count = count_numbers(test_sentence)
print(f"{int_count}个整数、{non_int_count}个非整数")

代码说明

  • 运行测试示例会输出2个整数、1个非整数,完全符合你的需求。
  • 如果需要支持更复杂的小数格式(比如.5或5.),可以把非整数的正则调整为\b(?:\d+\.\d*|\.\d+)\b,这样就能匹配这类边缘情况。

内容的提问来源于stack exchange,提问作者gamertamer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 00:14:57