繁体   English   中英

Python 在保持分隔符的同时将字符串拆分/切片到列表中

[英]Python Split/Slice a string into a list while keeping delimeter

我想获取一个字符串并使用分隔符从中创建一个列表,同时保留分隔符。

如果我有"A56-3#AJ4klAP0W" ,我想返回一个以 A 作为分隔符的列表。

[A56-3#, AJ4kl, AP0W]

我尝试过拆分和切片,但没有成功。 我确实做了列表理解以获取每个分隔符的索引列表,但无法用它做很多事情 [0, 6, 11]

您可以使用正则表达式和findall() function。

>>> re.findall('A?[^A]+', 'A56-3#AJ4klAP0W')
['A56-3#', 'AJ4kl', 'AP0W']

这甚至在字符串以分隔符开头时也有效。 例如

>>> re.findall('A?[^A]+', '56-3#AJ4klAP0W')
['56-3#', 'AJ4kl', 'AP0W']

说明:( Regex101

A?      : Zero or one "A"
  [^A]+ : Followed by one or more "not A"

使用 f 字符串很容易构建正则表达式:

def get_substrings(delim, s):
    rex = f"{delim}?[^{delim}]+"
    return re.findall(rex, s)

鉴于:

st="A56-3#AJ4klAP0W"

您可以使用枚举获取每个分隔符的索引:

idx=[i for i,ch in enumerate(st) if ch=='A']

然后使用该索引对字符串进行切片:

>>> [st[x:y] for x,y in zip([0]+idx, idx[1:]+[len(st)])]
['A56-3#', 'AJ4kl', 'AP0W']
# this is how you use the [0,6,11] list in your question

您还可以使用正则表达式拆分:

>>> re.split(r'(?=A)', st)
['', 'A56-3#', 'AJ4kl', 'AP0W']

或者找到满足该条件的子字符串(而不是拆分):

>>> re.findall(r'A*[^A]+', st)
['A56-3#', 'AJ4kl', 'AP0W']

 

只需将其重新添加:

>>> x = 'A56-3#AJ4klAP0W'
>>> x.split('A')
['', '56-3#', 'J4kl', 'P0W']
>>> ['A'+k for k in x.split('A') if k]
['A56-3#', 'AJ4kl', 'AP0W']
>>>
>>> [f'A{el}' for el in "A56-3#AJ4klAP0W".split('A') if el] ['A56-3#', 'AJ4kl', 'AP0W'] >>>
mystr = "A56-3#AJ4klAP0W" delim = "A" lst = mystr.split(delim) lst = [delim + x for x in lst if x != '']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM