给定一个字符串:s = FFFFRRFFFFFFFPPRRRRRRLLRLLRLLLPPFPPLPPLPPLFPPFFPFLRPFFRRLLRPFPRFFFFFFFFFLFDRRFRRFFFFFFFFRQEE
分隔字符为 P
、Q
、D
和 E
我希望能够根据这些字符拆分字符串。
基于:Is it possible to split a string on multiple delimiters in order?
我有以下内容
def splits(s,seps):
l,_,r = s.partition(seps[0])
if len(seps) == 1:
return [l,r]
return [l] + splits(r,seps[1:])
seps = ['P', 'D', 'Q', 'E']
序列 = split(s, seps)
这给了我:
['FFFFRRFFFFFFF',
'PRRRRRRLLRLLRLLLPPFPPLPPLPPLFPPFFPFLRPFFRRLLRPFPRFFFFFFFLF',
'RRFRRFFFFFFFFR',
'',
'E']
正如我们所看到的,第二个条目有很多 P
。
我想要的是最后一组 P
之间出现的字符,而不是第一次出现的字符(即 RFFFFFFFLF
)。
此外,分隔字符的出现顺序也不固定。
正在寻找如何实现这一目标的解决方案/提示?
更新:所需的输出,这些分隔符之间的所有字符串集(类似于所示的),但遵循上面最后一次出现的条件
更新2:预期输出
['FFFFRRFFFFFFF',
'RFFFFFFFLF', # << this is where the output differs
'RRFRRFFFFFFFFR',
'',
''] # << the last E is 2 consecutive E with no other letters, hence should be empty
最佳答案
听起来您想按从第一个角色出现到最后一个角色出现的顺序进行分割。
([PDQE])(?:.*\1)?
([PDQE])
captures class 中的角色之一(?:.*\1)?
optionally匹配任意数量的字符,直到最后一次出现 captured .
有一个try with split pattern at regex101和一个PHP Demo at 3v4l.org (Python 中应该类似)。
关于Python 字符串被多个分隔符分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56617594/