Python的re.split()没有删除所有匹配的字符

时间:2018-03-31 02:08:14

标签: python regex string parsing

这让我绝对疯狂。我很肯定,字符串开头的整个日期范围正由正则表达式匹配。然而,当我做re.split时,8会挂在后面。这里发生了什么以及如何在该日期范围内拆分(在某些情况下,它可能位于字符串的开头和中间,因此是拆分)?

import re
a = "09/05/2018-12/18/2018 Lecture Wednesday 01:30PM - 02:45PM, Room to be Announced"
b = r"([0-9]|\/|-){21}"
print re.split(b, a)

结果

['', '8', ' Lecture Wednesday 01:30PM - 02:45PM, Room to be Announced']

1 个答案:

答案 0 :(得分:2)

来自re.split的文档:

  

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

你有一个捕获组,它匹配的最后一件事就是角色8。这就是返回8的原因。

您可以改为使用非捕获组:

>>> b = r"(?:[0-9]|\/|-){21}"
           ^^ note these two characters added
>>> re.split(b, a)
['', ' Lecture Wednesday 01:30PM - 02:45PM, Room to be Announced']

或者您可以将所有选项放在单个字符类中,而根本不需要组:

>>> b = r"[-/0-9]{21}"
>>> re.split(b, a)
['', ' Lecture Wednesday 01:30PM - 02:45PM, Room to be Announced']