使用正则表达式

时间:2018-04-09 22:41:11

标签: python regex

我有一个像这样的pandas专栏:

LOD-NY-EP-ADM
LOD-NY-EC-RUL
LOD-NY-EC-WFL
LOD-NY-LSM-SER
LOD-NY-PM-MOB
LOD-NY-PM-MOB
LOD-NY-RMK
LOD-NY-EC-TIM

我希望新列中的输出为

EP
EC
EC
LSM
PM
PM
RMK
EC

我试过了:

pattern=df.column[0:10].str.extract(r"\w*-NY-(.*?)-\w*",expand=False)

虽然它适用于所有东西,但它无法将RMK输出并给出NaN,因为之后没有任何内容,它会查找 - \ w零次或多次。但是,如果在RMK之后什么也没有,那应该有用。

任何想法都会出错?

如果不熟悉pandas语法,我们可以使用这些数组并使用正则表达式。

2 个答案:

答案 0 :(得分:1)

你能用普通的python吗? 设df为您的数据框,row为您行的名称。

series = df.row
new_list =  [i.split('-')[2] for i in series]
new_series = pd.Series(new_list)

答案 1 :(得分:1)

pattern=df.column[0:10].str.extract(r"\w*-NY-(\w+)",expand=False)

请参阅https://regex101.com/r/3uDpam/3

您的正则表达式意味着匹配的字符串必须包含3个-个字符。我改变了它,所以最后-XX可能会发生0或1次。

更新:已更改,因此第二组未捕获(已添加?:

更新:感谢Casimir,在模式结束时删除了无用的组