使用正则表达式解析目录

时间:2018-03-15 17:12:25

标签: python regex

我正在尝试使用正则表达式解析目录。通常,提取的行看起来如下:

4.1.2行政........................................... .................................................. .................. Ii

或空格而不是点。我需要解析的是节号 - 在本例中为4.1.2 - 节名称 - 管理 - 和页码 - 在本例中为I-i。

到目前为止,我有以下部分:

.*(?=[.]{3,}|[ ]{3,})

但当然这会返回4.1.2管理。首先,我需要某种寻找后面的断言,寻找以下可能的组合:

  1. X,X.,X.X,X.X.,X.X.X等,其中X代表数字
  2. 从那里我得到部分名称,然后我需要另一个RE来获得部分编号X,X.,X.X,X.X。等。 最后我需要一个RE来获取页码。我想做类似的事情:

    (?<=[.]{3,}|[ ]{3,}).*
    

    但是当然上面的RE不起作用,因为后视不支持量词,如{3,}

    我最终想要的是

    sectionNumber = "4.1.2"
    sectionName = "Administrative"
    pageNumber = "I-i"
    

    任何这些帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

以下是一个可以与re.findall和不区分大小写的标记一起使用的正则表达式:

r'^([\d.]{1,5})\s([a-z]+)\s\.{10,}\s([\w-]+)'

演示:

In [39]: re.findall(r'^([\d.]{1,5})\s([a-z]+)\s\.{10,}\s([\w-]+)', s, re.I)
Out[39]: [('4.1.2', 'Administrative', 'I-i')]

注意 - 1:中间点被\.{10,}捕获,如果您愿意,可以将重复次数更改为更合适的点。尾随号码也与[\w-]+匹配,这意味着它可以匹配任何单词字符组合(数字和字母)与-。我建议你使用一组正确的字母字符,你肯定会在字符类中加上-加上([\d.]{1,5})

注意事项2:关于([\d.]+)如果您认为其中可能包含多位数字,我会建议您使用([\d.]{1,8})form更高的范围。