如何在re.split中将分隔符保留在返回列表的相同索引上

时间:2016-12-12 10:31:09

标签: python regex

使用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']

我希望它们位于相同的索引[u'<br>age: continuous.\r'

修改

其实我正在抓这部分 enter image description here 来自此网址http://archive.ics.uci.edu/ml/datasets/Adult 我希望将age: continuous.fnlwgt: continuous.以及所有这些内容放在列表中的单独元素中

2 个答案:

答案 0 :(得分:2)

似乎你想要在<br>上拆分,然后是0 +空格和1+个字母或连字符。

您需要将模式的一部分转换为非消费子模式,正向前瞻

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

请参阅regex demo

作为zero-width assertion(?=\s*[a-zA-Z-]+:)不会消费(=将文字放入匹配项)<br>符合\s*[a-z-]+:模式的子字符串,但需要它出现在那里。

答案 1 :(得分:1)

我个人使用以下正面的正则表达式:

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

你可以看到它正常工作here。要使用re.findall提取所有匹配项。