2017-03-19 19 views
2

快速的問題,因爲我卡住了,似乎沒有得到任何進一步的。Python:從列表中刪除/過濾等號

這裏是我的問題:

我在數據集中工作在那裏我從一個XML轉儲提取Wikipedia頁面的每一個部分的名稱。我提取文本和文本,每部分給出通過:

==章節名稱==

然而,也有我不打算處理和通過

給出小節===章節名稱===

目前我使用正則表達式過濾從文本的部分(pagetext)

sections = re.findall("==(.*)==", pagetext) 

結果卻是爲t小節的小節也包含在我的部分列表中。問題:如何從我的部分列表中篩選這些子部分,以僅檢索文本中的部分。

我已經使用這個列表理解,但不工作

sections = [section for section in sections if section[0] == (r"^=")] 

任何幫助是極大的讚賞:)很多感謝!

+0

要清楚,您是直接使用正則表達式處理XML,還是先將XML轉換爲其他內容? – kojiro

+0

不,首先我處理XML以達到標記,並試圖找到該文本標記內的部分 – Oliver

回答

2

如果周圍的文字完全是任意的,你可能不得不求助於negative lookahead and negative lookbehind

re.findall(r'(?<!=)==(?!=)(.*?)(?<!=)==(?!=)', pagetext) 
# (?<!...) only matches if not preceded by ... 
# (?!...) only matches if not followed by ... 
# (.*?) the captured group itself, anything matched non-greedily 

這可確保包含'=='的部分既不後面也不後跟'='

+0

完美!這工作:) – Oliver

0
  1. 啓用多行標記re.M,以便表達式可以錨定在行的開頭。
  2. 將表達式固定在每行的開頭。
  3. 排除在你原來的正則表達式小節通過排除第三等號

例如

sections = re.findall("^==([^=].*)==", pagetext, re.M) 
+0

這仍然會找到由三個'='符號包圍的部分。 – schwobaseggl

+0

@schwobaseggl謝謝,修正。 – kojiro