【发布时间】:2021-08-07 00:32:42
【问题描述】:
我只想根据多个分隔符(如“and”、“&”和“-”)将字符串拆分一次。示例:
'121 34 adsfd' -> ['121 34 adsfd']
'dsfsd and adfd' -> ['dsfsd ', ' adfd']
'dsfsd & adfd' -> ['dsfsd ', ' adfd']
'dsfsd - adfd' -> ['dsfsd ', ' adfd']
'dsfsd and adfd and adsfa' -> ['dsfsd ', ' adfd and adsfa']
'dsfsd and adfd - adsfa' -> ['dsfsd ', ' adfd - adsfa']
'dsfsd - adfd and adsfa' -> ['dsfsd - adfd ', ' adsfa']
我尝试了以下代码来实现这一点:
import re
re.split('and|&|-', string, maxsplit=1)
它适用于除最后一种情况之外的所有情况。由于它不遵循层次结构,因此它返回的最后一个:
'dsfsd - adfd and adsfa' -> ['dsfsd ', ' adfd and adsfa']
我怎样才能做到这一点?
【问题讨论】:
-
我不确定正则表达式是否支持这种类型的操作(我会很高兴并且有兴趣被证明是错误的!)。也许您可以考虑使用 parsy 之类的东西构建语法。
-
也许您可以尝试在
'and'上拆分,如果没有拆分,请尝试在'&'上拆分,然后尝试'-'。不是最优雅的,但它可以完成工作。 -
问题是,正则表达式解析器需要从
^开始重新开始,以实现您的订单。此外,需要消耗初始部分。如果你可以使用PyPI regex,一个通用的想法是res = regex.split(r"^(?:.*?\Kand|.*?\K&|.*?\K-)", s)