将数字的大写字符与数字的小写字符分开

时间:2018-08-08 12:43:18

标签: python string pandas

我有一个名称列,其数据格式如下:

  Name              Name2
0 MORR1223ldkeha12  ldkeha12
1 FRAN2771yetg4fq1  yetg4fq1
2 MORR56333gft4tsd1 gft4tsd1

我想按 Name2 列分隔名称。有4个大写字符的模式,后跟4-5个数字,我对这4-5个数字后面的内容感兴趣。

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

4 个答案:

答案 0 :(得分:2)

您可以尝试以下逻辑:

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)

答案 1 :(得分:1)

使用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 :(得分:0)

您可以使用正则表达式找出是否有4位或5位数字,然后删除前8位或9位字母。因此,如果模式^[A-Z]{4}[0-9]{5}.*匹配,则有5位数字,否则为4位。

答案 3 :(得分:0)

如果您这样更改自己的re''(^ [AZ] {4})([0-9] {4,5})(。+)',则可以使用匹配结果的子匹配来访问不同的部分

因此在Anil的代码中,group(0)将返回整个比赛,第一个组返回1,第二个组返回2,其余的返回3。