鱼C论坛

 找回密码
 立即注册
查看: 2599|回复: 5

[已解决]用什么函数可以实现分隔非数字字符串切片?

[复制链接]
发表于 2020-1-3 12:45:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
用一个函数去实现分隔非数字字符串切片
比如

a1 = '2019-12-4' 、 a2 = '2019/12/4' 、a3= '2019 年12月4日'

输出

a1 = ['2019','12','4']
a2 = ['2019','12','4']
a3 = ['2019','12','4']
最佳答案
2020-1-3 17:56:22
  1. import re

  2. a1 = '2019-12-4'
  3. a2 = '2019/12/4'
  4. a3 = '2019年12月4日'


  5. def fun(a):
  6.     return re.findall(r"(\d+)", a)


  7. print(fun(a1))
  8. print(fun(a2))
  9. print(fun(a3))

  10. # 运行结果:
  11. # ['2019', '12', '4']
  12. # ['2019', '12', '4']
  13. # ['2019', '12', '4']
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-1-3 12:53:50 | 显示全部楼层
我第一想到的是正则
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-3 13:21:48 | 显示全部楼层
本帖最后由 Croper 于 2020-1-3 13:23 编辑
  1. import re
  2. def func(sz):
  3.     p=re.compile("[^\d]+?")
  4.     return [s for s in p.split(sz) if s!=""]

  5. a1 = '2019-12-4'
  6. a2 = '2019/12/4'
  7. a3 = '2019 年12月4日'
  8. print(func(a1))
  9. print(func(a2))
  10. print(func(a3))
复制代码


输出
  1. ['2019', '12', '4']
  2. ['2019', '12', '4']
  3. ['2019', '12', '4']
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-3 13:43:39 | 显示全部楼层
本帖最后由 wp231957 于 2020-1-3 13:54 编辑

非正则函数:


  1. a1 = '2019-12-4'
  2. a2 = '2019/12/4'
  3. a3= '2019 年12月4日'

  4. def foo(a:str)->list:
  5.   tstr=filter(lambda lm:lm not in '1234567890',a)
  6.   for x in list(tstr):
  7.      a=a.replace(x," ")
  8.   return a.split()
  9.   
  10. print(foo(a1))
  11. print(foo(a2))
  12. print(foo(a3))

  13. '''
  14. e:\pytest>python ex23.py
  15. ['2019', '12', '4']
  16. ['2019', '12', '4']
  17. ['2019', '12', '4']
  18. '''
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-3 17:56:22 | 显示全部楼层    本楼为最佳答案   
  1. import re

  2. a1 = '2019-12-4'
  3. a2 = '2019/12/4'
  4. a3 = '2019年12月4日'


  5. def fun(a):
  6.     return re.findall(r"(\d+)", a)


  7. print(fun(a1))
  8. print(fun(a2))
  9. print(fun(a3))

  10. # 运行结果:
  11. # ['2019', '12', '4']
  12. # ['2019', '12', '4']
  13. # ['2019', '12', '4']
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-3 19:00:22 | 显示全部楼层
本帖最后由 autist 于 2020-1-3 19:09 编辑

要这么花里胡哨?
  1. def fun(date):
  2.     a = []
  3.     for each in date:
  4.         if not each.isdigit():                       #判断是否为数字
  5.             b,date = date.split(each,1)         #切成两片,前面的加入列表,后面继续遍历
  6.             a.append(b)
  7.             if len(date)== 1:                       #最后一个直接加入列表,不是数字的话会在前面切掉
  8.                 a.append(date)
  9.     return a
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-4-1 14:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表