【问题标题】:How do I isolate a number from a string in python(django)?如何从 python(django) 中的字符串中分离出一个数字?
【发布时间】:2014-08-19 15:54:42
【问题描述】:

在我的一种形式中,我发送了两个这样的信息:

  <input type ="hidden" name= "items" value="{{item.pk}} {{item.name}}">

当我通过 request.POST.get 获取信息时,我得到“202 book”。

我怎样才能将字符串中的数字或单词分开?我做了一个拆分:

  pks = request.POST.getlist("items")
  for pk in pks:
      pk.split(' ',1)

但该数字并不总是 1 或 2 位数字,它可能是 2 或 3 等。此外,我可能会遇到名称为 book1 的情况,因此我需要保留最后一个“1”。

有什么想法可以解决这个问题吗?

【问题讨论】:

  • 如果字符串的数字和文本部分之间总是有空格,那你为什么不用空格分割呢?你也可以使用正则表达式...
  • 对于202 bookbook1 或类似的东西,你可以使用正则表达式和\d+
  • 我尝试按空格分割,但它对我不起作用,这是我在 pks 中尝试的 pk:pk.split(' '),这是错误的语法吗?我会查找正则表达式

标签: python regex django python-2.7 django-views


【解决方案1】:

除非我误解了您的问题,否则您为什么不直接拆分字符串并从结果列表中提取第一个和第二个元素?演示:

>>> mystr = "202 book"
>>> lst = "202 book".split()
>>> num = lst[0] # or int(lst[0])
>>> num
'202'
>>> other = lst[1]
>>> other
'book'

如果您有一个包含数字的字符串和可以包含数字的单词,但在查找数字时不应计算在内,您可以这样做:

>>> mystr = 'This 101 5is 4 600a 42 de3mo string12'
>>> re.findall(r'\b\d+\b', mystr)
['101', '4', '42']
>>> re.findall(r'(?!\d+\b)\w+', mystr)
['This', '5is', '600a', 'de3mo', 'string12']

【讨论】:

  • 我再次阅读了描述,我认为 SO 只需要 split() 即可获得预期结果
  • 我在您的建议中看到了错误,这也对我有用。
【解决方案2】:

你可以使用它,它确实有效!

my_digit = ''.join(temp for temp in my_string if temp.isdigit())

或者如果你想得到数字的值,你可以使用int(my_digit)

【讨论】:

  • 我不完全理解代码在做什么,因为我不熟悉 join,但它对我来说很好用,谢谢!
  • 我很高兴! Python join() 方法是一个字符串方法,它接受一个列表并将它们作为字符串连接起来!
【解决方案3】:

关于如何拆分数据,您有一些有用的答案,但既然您似乎同时控制模板和视图,为什么一开始就将它们放在同一个字段中?为什么不将它们放在两个单独的字段中?

<input type="hidden" name="item_pk" value="{{item.pk}}">
<input type="hidden" name="item_name" value="{{item.name}}">

【讨论】:

  • 这是因为我有来自表单的值,并且输入是通过一个复选框,我应该更清楚这一点。如果知道从每个选定的复选框同时发送它们的方法,我会选择的
  • 听起来像是 XY 问题,如果你问我的话。你应该问你真正想知道什么(在一个新问题中):显示表格和复选框,并询问如何获取正确的数据。
  • 这里的答案对我有帮助,所以我会把它留到另一个问题上。谢谢你:)
【解决方案4】:

我没用过django,但是用正则表达式怎么样?

import re

pk = "202 book";
print re.findall(r'\d\d?\d?',pk)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 2021-12-07
    相关资源
    最近更新 更多