首页 > 解决方案 > 如何找到字符串的第一个数字

问题描述

这是一个非常基本的问题..对不起....我是新手。一些规范: - 字符串是一个算术表达式。- 它希望输出返回数字,即 2 位数字或 3 位数字,具体取决于字符串。例如,如果字符串是“12+3-5/6”,那么输出应该是 12。我试过这个:

import re
s = "12*9-6/4"
m = re.search("\d" , s)
if m:
    print(s[m.start()])
else:
    print("try again")

但这会输出它看到的第一个数字,而不是整个 2 位数字。我该如何改变它?

input = '123abc456def'
output = re.findall(r'^\d+', input)

但这会返回方括号中的值。我只是得到一个数字。

标签: pythonpython-3.x

解决方案


如果没有regex,您可以使用next生成器理解和enumerate

s = '12*9-6/4'

idx = next((i for i, j in enumerate(s) if not j.isdigit()), len(s))

res = int(s[:idx])  # 12

解释

  • 生成器理解迭代枚举s,产生(0, '1'),,,(1, '2')(2, '*')
  • 有了next,我们发现第一个实例j.isdigit对 中的字符的计算结果为真s
  • 然后我们提取索引i;如果不存在这样的字符,我们使用字符串的长度。
  • 最后,我们使用s[:idx]将字符串分割到但不包括计算的索引。

推荐阅读