【发布时间】:2016-12-22 22:55:17
【问题描述】:
首先,问题被标记为Python 和regex,但它与这些问题并没有真正的联系——答案可能是高水平的。
目前,我正在使用以下模式拆分具有多个分隔符的字符串。实际上有更多的定界模式,它们也更复杂,但让我们保持简单并将它们限制为 2 个字符 - # 和 *:
parts = re.split('#|*', string)
这种方法将字符串aaa#bbb*ccc#ddd拆分为4个子字符串aaa、bbb、ccc、ddd。但是需要通过字符串中最先出现的分隔符或字符串中最频繁出现的分隔符进行拆分。 aaa#bbb*ccc#ddd 应拆分为 aaa、bbb*ccc、ddd 和 aaa*bbb#ccc*ddd 应拆分为 aaa、bbb#ccc、ddd。
我知道一种直接的方法来实现这一点 - 找出首先出现的分隔符或字符串中最频繁出现的分隔符,然后用该单个分隔符拆分。但是该方法必须有效,我想知道是否可以通过单个正则表达式来实现。问题主要是针对第一次出现的分隔符进行拆分 - 对于最常见的分隔符情况,几乎可以肯定需要提前计算出现次数。
更新:
该问题不要求同时按第一次出现或最常见的分隔符进行拆分-单独使用任何一种方法就足够了。我确实明白,如果没有初步确定分隔符,正则表达式不可能通过最常见的分隔符进行拆分,但我认为在没有事先准备的情况下,正则表达式和前瞻有可能通过第一次出现进行拆分。
【问题讨论】:
-
没有正则表达式会找到最频繁的模式。您将不得不依赖其他语言手段。