我正试图找到一种解决方案,以按组出现的方式拆分字符串。
字符串的格式如下:"AAA/BBB/CCC/DDD/BBB/CCC/DDD/BBB/DDD"
我希望字符串像这样分割:
1)AAA/BBB/CCC/DDD
2)BBB/CCC/DDD
3)BBB/DDD
'/'始终是分隔符,单词始终是AAA,BBB,CCC和DDD。
我用{x}尝试了正则表达式(AAA|BBB|CCC|DDD){x}
来指定出现的次数,但是看来{}仅适用于字符,不适用于单词。
答案 0 :(得分:1)
您可以将re.findall
与以下正向超前模式一起使用,以确保仅在斜杠后接序列中允许的字符时才包含斜杠,并使用?
作为转发器来制作每个单词都可以匹配(但很贪婪):
import re
s = 'AAA/BBB/CCC/DDD/BBB/CCC/DDD/BBB/DDD'
re.findall('(?=[ABCD])(?:AAA(?:/(?=[BCD]))?)?(?:BBB(?:/(?=[CD]))?)?(?:CCC(?:/(?=D))?)?(?:DDD)?', s)
这将返回:
['AAA/BBB/CCC/DDD', 'BBB/CCC/DDD', 'BBB/DDD']
答案 1 :(得分:1)
您可以将re.split
与交替模式一起使用,其中交替模式包括由正后向和超前模式包围的斜杠,以确保斜杠前的字符比斜杠后的字符晚于序列:< / p>
import re
s = 'AAA/BBB/CCC/DDD/BBB/CCC/DDD/BBB/DDD'
re.split('(?:(?<=[BCD])/(?=A)|(?<=[CD])/(?=B)|(?<=D)/(?=C))', s)
这将返回:
['AAA/BBB/CCC/DDD', 'BBB/CCC/DDD', 'BBB/DDD']