Python正则表达式替换特定正则表达式之后的列中的字符串部分

2024-06-01 14:49:40 发布

您现在位置:Python中文网/ 问答频道 /正文

仅当引用V、I或VI位于以下括号内时,我才要删除它:

输入:

VINE(PCI); BLUE(PI)
BLACK(CVI)
CINE(PCVI)

所需输出:

VINE(PC); BLUE(P)
BLACK(C)
CINE(PC)

当我使用df['col'].str.replace('[PC]+([VI]+)', "")时,它会替换括号内的所有内容。当我只使用df['col'].str.replace('[VI]+', "")时,它当然不起作用,因为它会删除所有其他出现的V和I。 在括号内只有这4个字母在PC和VI的任意组合中。 请问我做错什么了?你知道吗

谢谢


Tags: dfpicolbluereplace括号blackvi
2条回答

str.replace与捕获组和回调一起使用:

import re
df['col'] = df['col'].str.replace(
    r'\((.*?)\)', lambda x: re.sub('[VI]', '', f'({x.group(1)})'))

或者

df['col'] = df['col'].str.replace(r'\((P|PC|C)[VI]+\)',r'(\1)') # Credit, OP
print(df)
                 col
0  VINE(PC); BLUE(P)
1           BLACK(C)
2           CINE(PC)

另一种仅使用熊猫的解决方案:

import pandas as pd
S = pd.Series(["VINE(PCI)", "BLUE(PI)", "BLACK(CVI)", 'CINE(PCVI)'])
S.str.split('[\(\)]').apply(lambda x :  x[0] + "(" + x[1].replace("I", "").replace("V", "") + ")" + x[2])
0    VINE(PC)
1     BLUE(P)
2    BLACK(C)
3    CINE(PC)
dtype: object

相关问题 更多 >