Python Regex质询缩进

2024-10-04 03:17:31 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试解决一个问题,我知道我可以通过迭代字符串来解决,但是对于python,我确信有一个正则表达式可以更优雅地解决它。。。感觉就像放弃了迭代过程!在

基本上,我在一个属性单元格中有一个列表,我需要计算出哪些属性是子属性,哪些属性是子属性,并将它们与它们所属的属性相匹配。例如:

ID=11669 Antam红土镍铁作业
ID=19807 Gebe红土镍矿
ID=19808 Gee Island红土镍矿
ID=18923 Mornopo红土镍矿
ID=29411 Pomalaa镍铁冶炼厂
ID=19806 Pomalaa红土镍矿
ID=29412 Maniang红土镍矿项目
ID=11665东南苏拉威西红土镍矿项目
ID=27877 Bahubulu红土镍矿

应产生:

MasterProp,    SubProp
11669,          19807
11669,          19808
11669,          18923
11669,          29411
11669,          19806
19806,          29412
11669,          11665
11665,          27877

得到11669和第二级是很容易的-只要抓取我找到的第一个ID,然后添加到所有其他的。但要达到“第三级”就难多了

我尝试了以下方法

^{pr2}$

但这给我的第一个ID在8个空格之前,而不是最后一个ID在8个空格之前。。。所以在上面的例子中,我得到11669,而不是{}。我怀疑有一个表达式我可以放进去说,找到一个ID=(\d+),在它和8个空格之间没有其他的ID=(\d+),但这已经证明超出了我(新手)的能力!欢迎任何帮助。。。在


Tags: 项目字符串id列表属性过程作业空格
2条回答

使用BS获取标签后,您需要执行以下操作:

>>> from urlparse import urlparse, parse_qs
>>> myurl = 'ShowProp.asp?LL=PS&ID=19807'
>>> parse_qs(urlparse(myurl).query)
{'LL': ['PS'], 'ID': ['19807']}
>>> parse_qs(urlparse(myurl).query)['ID']
['19807']
>>> 

我认为带有HTML的示例代码更有意义——实际数据,而不是挥手致意。在

bs = BeautifulSoup.BeautifulSoup(html)

parent_stack = [None]
res = []
for span in bs.findAll('span', {'style':'white-space:nowrap;display:inline-block'}):
    indent = 1 + span.previousSibling.count(' ') / 5
    id = int(span.find('input')['value'])
    name = span.find('a').text.strip()

    # warning! this assumes that indent-level only ever
    #   increases by 1 level at a time!
    parent_stack = parent_stack[:indent] + [id]
    res.append(parent_stack[-2:])

结果

^{pr2}$

相关问题 更多 >