我想在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']