我想在Python中使用带有后向引用的正则表达式拆分文本。

rexp = re.compile(r"([`]{1,})ABC\1")
rexp.split("blahblah``ABC``blahblah")


我得到了['blahblah', '``', 'blahblah'],但期望是['blahblah', 'blahblah']
如何在不保留捕获组的情况下拆分字符串?

最佳答案

re.split()文档中:


  如果在模式中使用了捕获括号,则模式中所有组的文本也将作为结果列表的一部分返回。


由于您要使用反向引用,因此您无法避免第一个捕获组,但是您可以使其余的都不捕获,然后对拆分进行后处理以获得所需的结果,例如:

rexp = re.compile(r"([`]{1,})->\s*(?:\S+)\s*\|(?:.+?)<-\1")
rexp.split("blahblah``->Left|Right<-``blahblah")[0::2]  # ['blahblah', 'blahblah']


更新:我只是注意到您在此期间更改了模式,但是原理是相同的:

rexp = re.compile(r"([`]{1,})ABC\1")  # also, if optimizing, equivalent to: (`+)ABC\1
rexp.split("blahblah``ABC``blahblah")[0::2]  # ['blahblah', 'blahblah']

10-08 08:45