【问题标题】:Returning a fixed row (number) of numbers in a string?返回字符串中固定的数字行(数量)?
【发布时间】:2020-07-16 11:07:51
【问题描述】:

在此数据中:

[‘23 2312 dfr tr 133’,
 ‘2344 fdeed’,
 ‘der3212fr342 96’]

我想要一个函数,它可以在一行中有一定数量的数字时返回值。只要一行中有一定的数字,空格或其他文本都没有关系。 (不多不少)例如:


2 numbers in a row:
[‘23’,’’,’96’]

3 numbers in a row:
[‘133’,’’,’342’]

4 numbers in a row:
[‘2312’,’2344’,’3212’]

谢谢

【问题讨论】:

  • 数据是如何存储的?在这样的文本文件中?或者它们是否存储在任何预定义的结构中,例如数组或列表?
  • 你在寻找类似this的东西吗?
  • 导入形成列表。没有外部文件。该列表是一个字符串列表,就像问题顶部的字符串一样。谢谢。
  • 为什么前两个输出中间的空字符串?另外,请提供有效数据,你的引号不是正常的引号,会导致语法错误。
  • 我想知道如果列表中的第一个字符串是“23 2312 dfr tr 13”如果数字是2会发生什么。它将返回['23','','96']或['23','13','','96']或[['23,','13'],'','96']或什么?

标签: python regex python-3.x list


【解决方案1】:

一种方法是使用re.findall 从字符串中提取连续数字并保留长度为n 的数字:

l = ['23 2312 dfr tr 133',
     '2344 fdeed',
     'der3212fr342 96']

import re

def length_n_digits(l,n):
    return [s for i in l for s in 
            re.findall(rf'(?<!\d)\d{{{n}}}(?!\d)', i) or ['']]

请注意,双括号'{{}}' 只是为了转义内部括号,不会发生插值。 (?&lt;!\d) 和 (?!\d) 将环顾四周并确保它仅在 n 数字序列没有被其他数字包围时匹配。


length_n_digits(l, 2)
# ['23', '', '96']

length_n_digits(l, 3)
# ['133', '', '342']

length_n_digits(l, 4)
# ['2312', '2344', '3212']

【讨论】:

  • 但他想在号码为 2 时得到['23','','96']。
  • 现在应该没问题了@jizhihaoSAMA 有一个小细节我没有做对,这让我很生气:D
猜你喜欢
  • 2021-11-13
  • 1970-01-01
  • 2017-05-12
  • 1970-01-01
  • 1970-01-01
  • 2020-01-14
  • 2011-07-09
  • 2014-02-06
相关资源
最近更新 更多