【问题标题】:Splitting a string on non digits在非数字上拆分字符串
【发布时间】:2019-07-11 01:11:21
【问题描述】:

我正在尝试在任何不是数字的字符上拆分字符串。

orig = '0 1,2.3-4:5;6d7'
results = orig.split(r'\D+')

我希望得到results中的整数列表

0、1、2、3、4、5、6、7

但相反,我得到一个列表,其中包含与原始字符串匹配的单个字符串元素。

【问题讨论】:

标签: python python-3.x split


【解决方案1】:
for i in '0 1,2.3-4:5;6d7':
    try:
        print(int(i),end=' ')
    except:
        continue

0 1 2 3 4 5 6 7

【讨论】:

  • 这不是“拆分”列表。你只是在打印数字。
  • 创建一个列表,l=[],然后在 try/catch 块 '' l.append(int(i)) '' 代替 print(int(i))。
【解决方案2】:

试试这个:

orig = '0 1,2.3-4:5;6d7'
[i for i in orig if i.isdigit()]

【讨论】:

  • 不错的一个 - 虽然如果您的数字多于一位 ('12 142, 92'),您将得到 [1,2,1,4,2,9,2] 而不是 [12,142,92]
  • @PatrickArtner 是的,我注意到了。但也许它适用于 OP
【解决方案3】:

嗯......你正在使用str.split() - 它需要字符来分割 - 而不是正则表达式。您的代码将拆分为任何 '\D+' - 文本中的字符串:

orig = 'Some\\D+text\\D+tosplit'
results = orig.split(r'\D+')  # ['Some', 'text', 'tosplit']

您可以改用re.split()

import re

orig = '0 1,2.3-4:5;6d7'
results = re.split(r'\D+',orig)
print(results)

得到

['0', '1', '2', '3', '4', '5', '6', '7']

使用data = list(map(int,results)) 转换为int。

【讨论】:

  • 如果要获取非数字和数字部分,可以在正则表达式中添加组:re.split(r'(\D+)', orig)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 2014-12-22
  • 1970-01-01
  • 1970-01-01
  • 2022-12-08
  • 1970-01-01
相关资源
最近更新 更多