【问题标题】:Split string into letters and numbers将字符串拆分为字母和数字
【发布时间】:2015-11-04 22:35:10
【问题描述】:

我有一个 *string 字母和(负)数字,想用 python 将它们分成一个数组。

pathD = "M30,50.1c0,0,25,100,42,75s10.3-63.2,36.1-44.5s33.5,48.9,33.5,48.9l24.5-26.3"

splitS = re.split('(\d+)',pathD)

这不起作用,因为它会将点和破折号分成一排排的混乱:

['M', '30', ',', '50', '.', '1', 'c', '0', ',', '0', ',', '25', ',', '100', ',', '42', ',', '75', 's', '10', '.', '3', '-', '63', '.', '2', ',', '36', '.', '1', '-', '44', '.', '5', 's', '33', '.', '5', ',', '48', '.', '9', ',', '33', '.', '5', ',', '48', '.', '9', 'l', '24', '.', '5', '-', '26', '.', '3', '']

我想看到这样的东西:

 [M, 30, 50.1, c, 0, 0, 25, 100, 42, 75, s, 10.3, -63.2, 36.1, -44.5, s, 33.5, 48.9, 33.5, 48.9, l, 24.5, -26.3]

我不确定我是否走在正确的道路上,或者应该以不同的方式处理它。

【问题讨论】:

  • 如果那是 SVG 路径,那么我会使用 Python 的 SVG 工具来解决这个问题...
  • pathD 是一个字符串(所以值应该用引号引起来是有效的python语法)?你说它是一个列表,但是在它上面执行一个正则表达式,就像它是一个字符串一样。

标签: python python-2.7


【解决方案1】:
import re

pathD = "M30,50.1c0,0,25,100,42,75s10.3-63.2,36.1-44.5s33.5,48.9,33.5,48.9l24.5-26.3"

print(re.findall(r'[A-Za-z]|-?\d+\.\d+|\d+',pathD))

['M', '30', '50.1', 'c', '0', '0', '25', '100', '42', '75', 's', '10.3', '-63.2', '36.1', '-44.5', 's', '33.5', '48.9', '33.5', '48.9', 'l', '24.5', '-26.3']

【讨论】:

  • 谢谢!这几乎是我想要的,但它怎么会超过“c”和“s”之间的所有内容?
  • @Blikpils 已修复。立即更新
  • 如何修改上面的答案以同时保留像“$”这样的符号?
  • 在上面回答我自己的问题,查看这个 SO 帖子:stackoverflow.com/questions/53969284/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
  • 2013-09-30
  • 2021-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多