【问题标题】:How do I split a Very huge string And string without spaces?(python3)如何拆分非常大的字符串和没有空格的字符串?(python3)
【发布时间】:2018-07-11 21:53:35
【问题描述】:

首先我有这么长的字符串

s = '1MichaelAngelo'

我怎样才能得到输出为

new_s = '1 Michael Angelo' 

作为一个列表

new_list = [1,'Michael', 'Angelo']

注意:我已经从 html 中解析了一千个。

其次,我有这个巨大的字符串(由最多 1000 个名称和数字组成)。例如

1\nfirstName\nlastName\n.......999\nfirstName\nlastName

其中\n 表示换行符。

如何从中提取数据以输出如下内容:

[1, 'Michael', 'Emily], [2,'Mathew','Jessica'], [3, 'Jacob', 'Ashley '] 

等等。

【问题讨论】:

  • 使用 split() 将字符串转换为列表。但请展示您的尝试
  • 是的,我尝试使用 split() 但它只是将每个单词转储到一个列表中,这不是我想要的
  • 它在一个列表中给了我类似 [1,'Michael','this','that's,.. ] 的东西
  • 当我使用 .join() 时,第一个给了我“1 M I c h a e l A n g e l o”

标签: python string python-3.x python-2.x


【解决方案1】:

两个问题,两个答案。下次请一次问一个问题。

import re
s = '1MichaelAngelo'
[int(x) for x in re.findall(r'\d+',s)] + re.findall('[A-Z][^A-Z]*',s)
>>> [1, 'Michael', 'Angelo']

或者,或者,

import re
s = '1MichaelAngelo'
[int(x) if re.match(r'\d+',x) else x for x in re.findall(r'\d+|[A-Z][^A-Z]*',s)]

re.findall 在所需边界上拆分较长的字符串;

import re
s = '1\nfirstName\nlastName\n999\nfirstName2\nlastName2'
[[int(x) if re.match(r'\d+',x) else x for x in s.split('\n')[i:i+3]] for i in range(0,len(s.split('\n')),3)]
>>> [[1, 'firstName', 'lastName'], [999, 'firstName2', 'lastName2']]

列表解析首先将整个字符串分成三部分(使用https://stackoverflow.com/a/15890829/2564301 中显示的技巧),然后扫描新形成的整数列表并仅转换这些整数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 2018-12-13
    相关资源
    最近更新 更多