正则表达式排除数字模式

时间:2018-08-13 17:21:43

标签: python regex pandas

我有以下脚本,该脚本用于拉出括号内的记录ID。这也意味着忽略括号内的其他详细信息。我遇到了一个类似这样的详细信息(YYYY-DD)的问题,其中我不确定如何排除它,因为我需要保留其他包含“-”的记录ID。该脚本还从重要的结尾开始。

脚本:

df1['Doc ID'] = df['Folder Path'].str.extract('.*\((?!Data Only)(.*)\).*',expand=True)

我尝试添加:

[^\d\d\d\d-\d\d], (?!date_format) and neither work

请看第三个实例,这是我的问题所在:

  Folder Path                                               Doc ID
1 report/global/(Data Only)/admin (245)                     245 #245 is kept, 'Data Only' successfully ignored
2 report/regional(PRSP)/tech/(121,130,505 - RETIRED)/2018   121,130,505 - RETIRED #successfully ignores (PRSP)
3 global/report/admin (505)/(2018-03)                       2018-03 #I cannot figure out how to avoid 2018-03 or any YYYY-DD sequence and only grab 505 in this instance

1 个答案:

答案 0 :(得分:1)

如果要从右开始,则应在RE中表达出来。我建议以此作为起点:

df1['Doc ID'] = df['Folder Path'].str.extract('\(([^(]*?)\)[^)]*$',expand=True)

但是这会遇到匹配日期的问题,因此让我们为其插入一个子模式:

df1['Doc ID'] = df['Folder Path'].str.extract('\(([^(]*?)\)[^)]*(?:\(\d{4}-\d{2}\))?[^)]*$',expand=True)