我有一个有4列的数据帧,col4是一个包含文本和数字的字符串:
Col1 Col2 Col3 Col4
Syslog 2016,09,17 1 PD380_003 %LINK-3-UPDOWN
Syslog 2016,09,17 1 NM380_005 %BGP-5-NBR_RESET
Syslog 2016,09,14 1 NM380_005 %BGP-5-NBR_RESET
Syslog 2016,09,08 1 DO NOT TICKET LO380_004 %SYS-5-CONFIG_I Config
我需要保留该列的一个子字符串并删除任何其他内容,因此我使用了regex并创建了一个模式,但当我运行以下查询时,结果不是我想要的,它会用模式本身替换所有内容:
^{pr2}$期望的结果是:
Col1 Col2 Col3 Col4
Syslog 2016,09,17 1 PD380_003
Syslog 2016,09,17 1 NM380_005
Syslog 2016,09,14 1 LO380_004
Syslog 2016,09,08 1 LO380_004
但我得到的结果是:
Col1 Col2 Col3 Col4
Syslog 2016,09,17 1 ([A-Z]{2}[0-9]{3}_[0-9]{3})
Syslog 2016,09,17 1 ([A-Z]{2}[0-9]{3}_[0-9]{3})
Syslog 2016,09,14 1 ([A-Z]{2}[0-9]{3}_[0-9]{3})
Syslog 2016,09,08 1 ([A-Z]{2}[0-9]{3}_[0-9]{3})
我做错什么了?在
我想你需要^{} :
首先,你把错误的正则表达式放在了错误的位置。.replace的
to_replace
参数需要匹配要替换的内容和要删除的内容。因此,在本例中,您需要在regex前面加一个^.*
,后面加一个.*$
,因为您希望在匹配之外修剪字符串:Demo
其次,
replace
参数(如果是regex)需要是捕获组或固定字符串。在这种情况下,\1
就可以了。在最后,
.replace
的系列形式有一个更简单的语法(至少对我来说)要理解。在鉴于:
^{pr2}$您可以:
如果更简单,也可以使用位置参数版本:
但是您需要使用
regex=True
,因为替换字符串将被解释为regex而不仅仅是静态字符串。在最后,直接分配到原始文件中:
你使用正则表达式的方式不对。在
{'Col4':{'.*':'([A-Z]{2}[0-9]{3}_[0-9]{3})'}}
-表示将Col4
列中的任意字符串替换为'([A-Z]{2}[0-9]{3}_[0-9]{3})'
试试这个:
相关问题 更多 >
编程相关推荐