簡體   English   中英

Python的re.split()沒有刪除所有匹配的字符

[英]Python's re.split() not removing all matched characters

這讓我絕對瘋狂。 我很肯定,字符串開頭的整個日期范圍正由正則表達式匹配。 然而,當我做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']

來自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']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM