首页 > 解决方案 > 如何匹配和替换特定单词之后的所有内容,直到它到达使用python的字符串列表中的逗号?

问题描述

我有一个带有字符串列表的 DataFrame,如下所示

df

text
,info_concern_blue,replaced_mod,replaced_rad
,info_concern,info_concern_red,replaced_unit
,replaced_link

我想替换 info_concern 之后的所有单词,例如。info_concern_blue/info_concern_red 到 info_concern,直到遇到逗号。

我尝试了以下正则表达式:

df['replaced_text'] =  [re.sub(r'info_concern[^,]*.+?,', 'info_concern,',
           x) for x in df['text']]

但这给了我不正确的结果。

期望的输出:

replaced_text

    ,info_concern,replaced_mod,replaced_rad
    ,info_concern,info_concern,replaced_unit
    ,replaced_link

请建议/建议。

标签: pythonregexstring

解决方案


您可以使用

df['replaced_text'] = df['text'].str.replace(r'(info_concern)[^,]*', r'\1', regex=True)

请参阅正则表达式演示

如果要确保匹配在逗号或字符串开头之后立即(?<![^,])开始,请在模式开头添加后向:

df['replaced_text'] = df['text'].str.replace(r'(?<![^,])(info_concern)[^,]*', r'\1', regex=True)

请参阅此正则表达式演示详情

  • (?<![^,])- 就在之前,应该有一个,或字符串的开头
  • (info_concern)- 第 1 组:info_concern字符串
  • [^,]*- 除逗号之外的零个或多个字符。

\1替换用第 1 组值替换匹配项。


推荐阅读