这让我绝对疯狂。我很肯定,字符串开头的整个日期范围正由正则表达式匹配。然而,当我做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']
答案 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']