2017-09-29 56 views
1

我需要解析通过包含长字符串的Pandas DataFrame列,我需要找到一个特定的模式PXXXXX后的ID。 ID总是开始'P',随后是5个随机字符或数字,即PXYZAB。python解析字符串模式字符串

例如,

columnName 
    |||||||||||||||||||||Fefelajfeaflekj;alfkjeaf_PXXXXX 
    ||||XYz<,,,ffeals89fes|PXXXXX_fewalfeslfesfsfjfes 
    wh;lajkfeklaflkejasefj;lase|||||xxxx_PXXXX|wha;felkjasf 

回答

1
import pandas as pd 

    df = read_excel(c:\\......) 
    df.head() 

输出

String 
    |||||fe;jlkajf;lkeja;fji_PXXXX 
    ;ljf;oeiaf;ifs[op[[pof[PXXXX,;lkjf;lej;afle 
    [xyzPXXXX] 

解决方案

df['patterns'] = df['String'].str.findall('P[A-Za-z0-9]{5}') 

输出

String           patterns 
    |||||fe;jlkajf;lkeja;fji_PXXXX     PXXXXX 
    ;ljf;oeiaf;ifs[op[[pof[PXXXX,;lkjf;lej;afle  PXXXXX 
    [xyzPXXXX]          PXXXXX 
1

看看下面为你的作品..
更新了数字请求

import re                      

s='||||XYz<,,,ffeals89fes|PUVWXY_fewalfeslfesfsfjfes\nwh;lajkfeklaflkejasefj;lase|||||xxxx_PA1CDE|wha;felkjasf'

colIdx='Col Header Name in Data Frame where the string is' #OR just the 1 if it is 2nd column that you want to check and there are no headers in your data frame. 
ids=[m for idx, row in df.iterrows() for m in re.findall('P[A-Z0-9]{5}',row[colIdx])]:                

输出

PUVWXY 
PA1CDE 

注意,这仅捕获P随后5个资本字母或数字。

+0

我将如何修改这个代码纳入到允许Captial字母和数字? –

+0

编辑以允许数字。 – kaza

+0

请问如何格式化s变量以使其在DataFrame中的一列显示并让它遍历行? –