代码之家  ›  专栏  ›  技术社区  ›  Bartek Malysz

用数字分隔大写字符和小写字符

  •  0
  • Bartek Malysz  · 技术社区  · 6 年前

    我有专栏 名字 数据格式如下:

      Name              Name2
    0 MORR1223ldkeha12  ldkeha12
    1 FRAN2771yetg4fq1  yetg4fq1
    2 MORR56333gft4tsd1 gft4tsd1
    

    我想按列分开名字 NAME2 . 有一个4个大写字符的模式,后面跟着4-5个数字,我对这4-5个数字后面的内容很感兴趣。

    有什么办法可以做到这一点吗?

    4 回复  |  直到 6 年前
        1
  •  1
  •   Rakesh    6 年前

    使用 str.extract

    import pandas as pd
    
    df = pd.DataFrame({"Name": ['MORR1223ldkeha12', 'FRAN2771yetg4fq1', 'MORR56333gft4tsd1']})
    df["Name2"] = df["Name"].str.extract(r"\d{4,5}(.*)")
    print(df)
    

    输出:

                    Name     Name2
    0   MORR1223ldkeha12  ldkeha12
    1   FRAN2771yetg4fq1  yetg4fq1
    2  MORR56333gft4tsd1  gft4tsd1
    
        2
  •  2
  •   Anil Kumar    6 年前

    您可以尝试以下逻辑:

    import re
    _names = ['MORR1223ldkeha12', 'FRAN2771yetg4fq1', 'MORR56333gft4tsd1']
    result = []
    for _name in _names:
        m = re.search('^[A-Z]{4}[0-9]{4,5}(.+)', _name)
        result.append(m.group(1))
    print(result)
    
        3
  •  0
  •   WhiteMaple    6 年前

    您可以使用regex查找是否有4或5个数字,然后删除前8或9个字母。所以如果模式 ^[A-Z]{4}[0-9]{5}.* 匹配,有5位数字,其他4位。

        4
  •  0
  •   Chabu    6 年前

    如果您像这样更改您的re'(^[a-z]4)([0-9]4,5)(..+)'可以使用匹配结果的子匹配访问不同的部分。

    所以在Anil的代码中,组(0)将返回整个匹配,1第一组,2第二组,3其余。