搜索模式不是唯一的? - 正则表达式

时间:2017-06-27 20:50:35

标签: python string pandas search

我想编写一个函数来清理数据帧的索引列。

  1. 删除具有高级ID的整行。例如,删除

    East Kootenay (5901) 01010

  2. 将索引定制为7位数的低级ID。例如,转

    East Kootenay A (5901017) RDA 02020 进入5901017

  3. 如果它有两个括号,则只保留第二个括号中的7位数字。例如,

    Sechelt (Part) (5929803) IGD 020205929803

    Capital H (Part 1) (5917054) RDA 010205917054

    Capital H (Part 2) (5917056) RDA 020305917056

    T'Sou-ke 1 (Sooke 1) (5917817) IRI 010105917817

    T'Sou-ke 2 (Sooke 2) (5917818) IRI 000005917818

  4. 仅适用于一个括号的代码示例是

    def extract_id(s):
        m = re.search('\((.*)\)', s)
        if m:
            i = int(m.group(0)[1:-1])
            return i
    
    if __name__ == '__main__':
        # Read data
        census_subdivision_profile = pd.read_excel('../data/census_subdivision_profile.xlsx', sheetname='Data',
                                                   index_col='Geography', encoding='utf-8').T
        print(census_subdivision_profile.head())
        print(census_subdivision_profile.shape)
    
        census_subdivision_profile.index = census_subdivision_profile.index.map(extract_id)
        print(census_subdivision_profile.index)
    

    要查看完整代码,请参阅我之前发布的另一个问题

    Merge dataframes that have indices that one contains another (but not the same)

2 个答案:

答案 0 :(得分:1)

我认为你打算'\(([^)]*)\)' ... hth

答案 1 :(得分:0)

我不理解第2点和第3点之间的区别。在这两种情况下,您只想提取括号中的7位数字?在这种情况下,我对正则表达式更加明确,例如\((\d{7})\)