不要仅在数据帧中的特定单词前面替换星号



我想在数据帧列中写一个正则表达式,如果前面有单词"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(.*(,条件是匹配的区域后面紧跟着星号(*(((?=("。

最新更新