处理更多重复格式的字符串

13 阅读1分钟

下面是几个常见的扩展场景及相应的解决方式。你可以根据自己的目标选择使用其中之一或多个组合。


✅ 目标 1:不仅处理数字重复,还处理任意文本重复,如 'abc,abc''abc'

import re
df['modelCode'] = df['modelCode'].apply(lambda x: re.sub(r'([^,]+),\1', r'\1', x))
  • 正则解释:

    • ([^,]+):匹配非逗号的任意字符,直到逗号(即一个字段);
    • ,\1:紧跟重复项;
    • 整体表示:只要 前面一段,后面一模一样,就保留一份。

✅ 目标 2:处理 多个重复 项,例如 '123,123,123''123''abc,abc,abc''abc'

import re
df['modelCode'] = df['modelCode'].apply(lambda x: re.sub(r'^([^,]+)(,\1)+$', r'\1', x))
  • 正则解释:

    • ^([^,]+):第一段非逗号字符;
    • (,\1)+:后面若干个重复的 ,相同内容
    • $:整串必须全部由重复组成,才替换。

✅ 目标 3:替换连续重复字段(即中间也可以有其它),例如:

  • '123,123,456,456''123,456'
  • 'abc,abc,def,ghi,ghi''abc,def,ghi'

这需要使用 去重逻辑,用 Python 实现:

df['modelCode'] = df['modelCode'].apply(lambda x: ','.join(dict.fromkeys(x.split(','))))
  • 利用 dict.fromkeys() 保持顺序去重;
  • 适合用于处理 列表形式字段(用逗号分隔)中的重复内容。

🔍 举例对比总结:

原始值方法1(文本重复)方法2(全部重复)方法3(去重保顺序)
'123,123''123''123''123'
'abc,abc''abc''abc''abc'
'123,123,123''123,123''123''123'
'abc,abc,def''abc,abc,def'无变化'abc,def'
'abc,def,abc'无变化无变化'abc,def'
'a,a,b,c,c,c'无变化无变化'a,b,c'

✅ 推荐方案(最通用)

如果你想处理各种重复(数字、文本、多个重复),并保持顺序干净,推荐使用 方法3

df['modelCode'] = df['modelCode'].apply(lambda x: ','.join(dict.fromkeys(x.split(','))))

它是最稳健、实用的。