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

2023-12-07

这真让我抓狂。我确信字符串开头的整个日期范围都由正则表达式匹配。然而,当我重新分割时,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)

Result

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

从文档中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']
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 的 re.split() 不删除所有匹配的字符 的相关文章

随机推荐