我有一个名称列,其数据格式如下:
Name Name2
0 MORR1223ldkeha12 ldkeha12
1 FRAN2771yetg4fq1 yetg4fq1
2 MORR56333gft4tsd1 gft4tsd1
我想按 Name2 列分隔名称。有4个大写字符的模式,后跟4-5个数字,我对这4-5个数字后面的内容感兴趣。
有什么办法可以做到这一点?
答案 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。