2016-12-12 19 views
1

使用re.split()時我知道如何在分隔結果中保留分隔符,就是使用()捕獲組。如何在re.split中保留分隔符在返回列表的相同索引上

但我有一個問題,這是我的正則表達式(<br>*\s*[a-z]+)這裏是字符串

Attribute Information:</b><br>Listing of attributes:<br>&gt;50K, <br>age: continuous.<br>workclass: Private, Self-emp-not-inc, Self-emp-inc, Federal-gov, Local-gov, State-gov, Without-pay, Never-worked.<br>fnlwgt: continuous. 

返回從分裂的結果是

[u'<br>age', u': continuous.\r', u'<br>workclass', u': Private, Self-emp-not-inc, Self-emp-inc, Federal-gov, Local-gov, State-gov, Without-pay, Never-worked.\r', u'<br>fnlwgt', u': continuous.\r'] 

手段兩者都是在不同的索引[u'<br>age', u': continuous.\r']

我想讓他們在同一個索引上

編輯

其實我從這個URL http://archive.ics.uci.edu/ml/datasets/Adult 刮這部分 enter image description here 我想age: continuous.fnlwgt: continuous.和他們都在不同的元素列表

+0

你能否解釋一下要求?此外,您在示例輸出中有'\ r',但在共享示例輸入中沒有換行符。 –

+0

@WiktorStribiżew查看編輯 – Umair

+0

爲什麼不用'
'分割整個'p'標記值以獲得單獨的行?或者,我想你是在'r'
(?= \ s * [a-z - ] + :)之後',參見[this regex demo](https://regex101.com/r/Xhxont/2)。 –

回答

2

看起來你想分割一個<br>,後面跟着0個空格和1個字母或連字符。

你需要把你的模式的一部分,納入一筆非消耗子模式,一個正向前查找

r'<br>(?=\s*[A-Za-z-]+:)' 
     ^^^^^^^^^^^^^^^^^ 

regex demo

一個(?=\s*[a-zA-Z-]+:),是一個zero-width assertion,不不會消耗(=將文本放入匹配中)符合\s*[a-z-]+:模式的<br>之後的子字符串,但要求它出現在那裏。

+0

你能進行更改以查看'1+小寫或大寫字母' – Umair

+0

我更新了答案。其實,你可以使用're.I'標誌並繼續使用'[a-z-]' –

+0

感謝您的時間和真正精彩的答案...... – Umair

1

我個人使用內部以下積極的正則表達式:

(?<=<br>).*?:.* 

你可以看到它的工作here。爲了提取所有匹配使用re.findall

相關問題