【问题标题】:Get numbers string Python [duplicate]获取数字字符串Python [重复]
【发布时间】:2017-02-25 00:50:52
【问题描述】:

谁能帮帮我?

我有这个字符串:

Tip:1-Cli:337|Neg:695|Pro:7558|Nom:802|Esq:1|Rub:None|Con:None|Emp:None|Com:1,Tip:1-Cli:337 |Neg:695|Pro:7558|Nom:850|Esq:1|Rub:None|Con:None|Emp:None|Com:1,Tip:1-Cli:337|Neg:695|Pro:7558|Nom :1627|Esq:1|Rub:None|Con:None|Emp:None|Com:1

我尝试获取数字:“7558", "7558", "7558" y "802", "850", "1627"

这是我的代码:

    for y in str(nvaCadena):
         o_pro = nvaCadena.index('Pro:') + 4         
         f_pro = nvaCadena.index('|Nom:')            
         p = nvaCadena[o_pro: f_pro]

         o_nom = nvaCadena.index('|Nom:') + 5
         f_nom = nvaCadena.index('|Esq:')
         n = nvaCadena[o_nom:f_nom]

但我得到:7558 - 802 7558 - 802 7558 - 802

我想要:7558 - 802 7558 - 850 7558 - 1627

请帮忙!

【问题讨论】:

  • 请给出一个完整的例子,我们可以运行。具体来说,请显示所有变量初始化。
  • 这对我来说不像是重复的。
  • @DYZ 我也不知道。链接的答案讨论了一个列表,而这个问题说它是一个字符串,所以这两个问题并不完全相同。

标签: python string for-loop find


【解决方案1】:

您可以(并且可能应该)使用正则表达式:

numbers = re.findall(r'Pro:(\d+)\|Nom:(\d+)',s)
# [('7558', '802'), ('7558', '850'), ('7558', '1627')]
" ".join((x + " - " + y) for x,y in numbers)
# '7558 - 802 7558 - 850 7558 - 1627'

【讨论】:

  • 对于已经掌握正则表达式但不熟悉标准库的基本字符串操作功能(例如 string.find() 函数)的人来说,这是一个完美的答案。
【解决方案2】:

我假设nvaCadena 是一个列表。您不应将其转换为带有str(nvaCadena) 的字符串。

接下来,您应该使用循环变量y 而不是忽略它。

【讨论】:

  • 这个问题明确地说,“我有这个字符串......”。
  • @PaulCornelius 如果nvaCadena 已经是一个字符串,那么没有理由做str(nvaCadena)。此外,您的循环不正确,因为您忽略了y。你得到的输出是因为你一遍又一遍地做同样的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
  • 1970-01-01
  • 2013-08-12
  • 2013-02-15
  • 2021-07-09
  • 2021-01-09
相关资源
最近更新 更多