python - 如何找到字符串的第一个数字
问题描述
这是一个非常基本的问题..对不起....我是新手。一些规范: - 字符串是一个算术表达式。- 它希望输出返回数字,即 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)
但这会返回方括号中的值。我只是得到一个数字。
解决方案
如果没有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]
将字符串分割到但不包括计算的索引。
推荐阅读
- javascript - 使用 javascript 通过 Steam API 获取 steamID
- svm - 为什么使用奇异值 (SVD) 调整 svm 算法非常慢?
- graphql - 无法使用 StoreFront GraphQL API 获取产品元字段
- javascript - 由于 MIME 类型与传单地图不匹配,资源被阻止
- apache - XAMPP Apache 意外关闭。似乎不是端口 80 的问题
- swift - 回声在 preaction Xcode
- javascript - GraphQL Datatable,如何访问字段的字段
- python - 使用 poplib 阅读电子邮件会引发错误 - poplib.error_proto: -ERR EOF
- performance - 由于正在处理大量文件,Snakemake 速度呈指数级下降
- laravel-backpack - 能够使用 Backpack for Laravel 判断 CRUD 控制器的模型是否已更新