【问题标题】:In Python 2.7: How can I split a number from a string在 Python 2.7 中:如何从字符串中拆分数字
【发布时间】:2017-01-13 13:54:21
【问题描述】:

我的字符串是这样的:

str1 = "3,5 of 5 stars"
str2 = "4 of 5 stars"

我想提取每个字符串的第一个数字。

类似的东西:

str1 = 3,5
str2 = 4

问题是数字有两种格式(int 和 float)

希望大家能帮帮我

感谢您的帮助

【问题讨论】:

  • 你用逗号表示浮点数? str1 = 3,5 将在 Python 中转换为元组而不是浮点数。str = "X of Y stars" 的一般格式\模式会是什么?
  • 你的字符串总是以数字开头吗?
  • .split(" of ")[0]
  • @Ev.Kounis 我怀疑这是一个本地化问题 - 许多国家/地区使用逗号作为小数点
  • @MSeifert 是的,它们总是以数字开头(例如 3 of..,3,5 of ..)

标签: python string python-2.7 split


【解决方案1】:

如果"of"之前有空格,可以使用(避免正则表达式):

>>> print [item.split()[0] for item in [str1, str2]]
['3,5', '4']

【讨论】:

  • 为什么"of"后面必须有一个空格?你可能是说之前
【解决方案2】:
string = "3 o 4 k 5"

for char in string:
    entry = ""
    try:
        entry = int(char)
    except:
        continue
    if entry != "":
        print entry
        break

这里是解释。 string 保存字符串。在for 循环开始时,char 被设置为字符串中的第一个字符。 for 循环尝试将字符转换为整数。如果成功,就说明是字符是数字。在这种情况下,它是第一个找到的数字,所以它被输出并且循环停止。

如果转换失败,它将输出错误(因此是except 部分),但由于我们使用的是try/except,循环将立即跳到下一个字符。 for 循环将继续,直到找到一个数字或字符串中没有数字。

【讨论】:

    【解决方案3】:

    如果字符串的模式总是“X of Y stars”,您可以执行以下操作:

    str1 = "3,5 of 5 stars"
    str2 = "4 of 5 stars"
    
    lst = [str1, str2, ...]
    nums = [float(x.split(' of ')[0].replace(',','.')) for x in lst]
    print(nums)  # prints [3.5, 4.0]
    

    【讨论】:

      【解决方案4】:

      要匹配字符串中的数字和浮点数(使用, 分隔符),您可以使用re 模块:

      >>> re.findall(r"[-+]?\d*\,\d+|\d+", "5,5 of 5 stars")
      ['5,5', '5']
      
      >>> re.findall(r"[-+]?\d*\,\d+|\d+", "5,5 of 5 stars")[0]
      '5,5'
      
      >>> re.findall(r"[-+]?\d*\,\d+|\d+", "4 of 5 stars")[0]
      '4'
      

      我使用了来自this StackOverflow answer (from @miku) 的正则表达式,但将其修改为使用, 作为分隔符而不是.

      【讨论】:

        【解决方案5】:

        我猜你的字符串格式是 - X of Y stars

        你可以这样提取X。

        >>> my_str = "3,5 of 5 stars"
        >>> my_str.strip().split(' ')[0]
        '3,5'
        

        假设您想将3,5 转换为浮点数以对其进行一些数学运算,然后您首先将, 替换为.,然后环绕float(...)

        >>> float(my_str.strip().split(' ')[0].replace(',','.'))
        3.5
        

        【讨论】:

        • 您可以将, 替换为.
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 1970-01-01
        • 2020-03-19
        • 1970-01-01
        • 1970-01-01
        • 2013-08-30
        • 1970-01-01
        相关资源
        最近更新 更多