我想在数据帧列中写一个正则表达式,如果前面有单词"pay",则不替换*,否则用空格替换*。
例如,如果我有这个数据帧:pd.DataFrame({'a':['pay * jaf',"df*kafds","*fjas","kf8* 8*jkds"]})
,它应该只在第一行中保留*,然后对于其他行,它应该用空格替换它。
所以如果我做df["col"] = df["col"].str.replace(pat, ' ')
,它应该返回pd.DataFrame({'a':['pay * jaf',"df kafds"," fjas","kf8 8 jkds"]})
我想不出能做到这一点的正则表达式。目前,我有这种模式pay.*(?=*)
,但它不起作用。看起来应该很简单,但我是regex的初学者。任何帮助都将不胜感激。
你已经很接近了,因为你已经发现你想要一个后备,但你的逻辑正好相反。
您需要一个匹配所有*
星号的模式,但条件是星号前面不包含单词pay
。
pat = '(?<!pay.*)*'
此模式的意思是"如果当前位置((?<!
(前面没有字母pay
和任意数量的字符(.*
(,则在当前位置匹配星号(*
("。
为了进行比较,模式pay.*(?=*)
的意思是"匹配任何后面跟着任意数量字符的pay
(.*
(,条件是匹配的区域后面紧跟着星号(*
(((?=
("。