我有以下字符串:
bar = 'F9B2Z1F8B30Z4'我有一个函数foo,它在F上拆分字符串,然后添加回F分隔符。
def foo(my_str):
res = ['F' + elem for elem in my_str.split('F') if elem != '']
return res这是有效的,除非在字符串中有两个“F”背对背。例如,
foo('FF9B2Z1F8B30Z4')返回
['F9B2Z1', 'F8B30Z4'](未处理字符串开头的双"F“)
我希望将函数拆分到第一个"F“中,并将其添加到列表中,如下所示:
['F', 'F9B2Z1', 'F8B30Z4']如果字符串中间有一个双"F“,那么所需的行为是:
foo('F9B2Z1FF8B30Z4')
['F9B2Z1', 'F', 'F8B30Z4']任何帮助都将不胜感激。
发布于 2022-02-14 23:07:16
不要使用筛选if,而是使用切片,因为空字符串只在开始时是一个问题:
def foo(my_str):
res = ['F' + elem for elem in my_str.split('F')]
return res[1:] if my_str and my_str[0]=='F' else res输出:
>>> foo('FF9B2Z1F8B30Z4')
['F', 'F9B2Z1', 'F8B30Z4']
>>> foo('FF9B2Z1FF8B30Z4FF')
['F', 'F9B2Z1', 'F', 'F8B30Z4', 'F', 'F']
>>> foo('9B2Z1F8B30Z4')
['F9B2Z1', 'F8B30Z4']
>>> foo('')
['F']发布于 2022-02-15 02:38:17
使用regex可以用
import re
pattern = r'^[^F]+|(?<=F)[^F]*'^[^F]+捕获不以F开头的字符串开头的所有字符。
(?<=F)[^F]*捕获F之后的任何内容,只要它不是F字符,包括空匹配。
>>> print(['F' + x for x in re.findall(pattern, 'abcFFFAFF')])
['Fabc', 'F', 'F', 'FA', 'F', 'F']
>>> print(['F' + x for x in re.findall(pattern, 'FFabcFA')])
['F', 'Fabc', 'FA']
>>> print(['F' + x for x in re.findall(pattern, 'abc')])
['Fabc']请注意,对于空字符串,这不会返回任何内容。如果空字符串需要返回['F'],则模式可以更改为pattern = r'^[^F]+|(?<=F)[^F]*|^$',添加^$以捕获空字符串。
https://stackoverflow.com/questions/71119260
复制相似问题