【问题标题】:How do I find the first number of a string [duplicate]如何找到字符串的第一个数字[重复]
【发布时间】:2018-05-31 11:14:39
【问题描述】:

这是一个非常基本的问题..对不起....我是新手。 几个规格: - 字符串是算术表达式。 - 它希望输出返回数字,即 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)

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

【问题讨论】:

标签: python python-3.x


【解决方案1】:

没有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] 将字符串分割到但不包括计算的索引。

【讨论】:

  • 这个方法我不熟悉。对不起。我不知道第 2 行和第 3 行代码是什么意思。
  • @Shesps,我已经更新了解释。
  • 谢谢...现在我明白了!!!
【解决方案2】:

尝试使用 re.match

例如:

import re
s = "12*9-6/4"
m = re.match("(?P<first>\d+)" , s)
if m:
    print(m.group('first'))
else:
    print("try again")

输出:

12

【讨论】:

  • 谢谢。我对 re 不熟悉,所以我不知道 match 功能。既然你告诉我这个,我已经在网上阅读并学习了它。再次感谢。
  • 不客气 :)
猜你喜欢
  • 2011-02-02
  • 2012-08-30
  • 1970-01-01
  • 2013-09-25
  • 2011-01-18
  • 1970-01-01
  • 2021-07-29
  • 1970-01-01
相关资源
最近更新 更多