如何用R识别并去除标识符末尾的'-+数字'后缀生成新列
批量去除标识符末尾的“-多位数”后缀
需求回顾
原数据集:
identifier number cat-123 5 green-489743 25 orange-fish5 77 red-blue123 90 dog-23 34 orange5 17 reptile 9 purple-2 11
需要生成新列identifier_edited,规则是:仅去除**标识符末尾以连字符开头、数字结尾(支持单/多位数)**的后缀,不符合该格式的标识符保持不变,最终效果:
identifier number identifier_edited cat-123 5 cat green-489743 25 green orange-fish5 77 orange-fish5 red-blue123 90 red-blue123 dog-23 34 dog orange5 17 orange5 reptile 9 reptile purple-2 11 purple
解决方案:正则表达式精准匹配替换
核心思路是用正则表达式精准定位字符串末尾的-+任意位数数字,然后替换为空。关键正则表达式为:-\d+$
-:匹配连字符\d+:匹配1个及以上数字(覆盖单/多位数)$:锚定字符串结尾,确保只替换末尾的符合规则部分
1. Python Pandas 实现
import pandas as pd # 构造或读取你的数据集 df = pd.DataFrame({ 'identifier': ['cat-123', 'green-489743', 'orange-fish5', 'red-blue123', 'dog-23', 'orange5', 'reptile', 'purple-2'], 'number': [5, 25, 77, 90, 34, 17, 9, 11] }) # 生成新列 df['identifier_edited'] = df['identifier'].str.replace(r'-\d+$', '', regex=True) # 查看结果 print(df)
2. SQL 实现(支持MySQL/PostgreSQL等)
SELECT identifier, number, REGEXP_REPLACE(identifier, '-\d+$', '') AS identifier_edited FROM your_table_name;
效果验证
运行上述代码后,会精准匹配并去除cat-123、green-489743这类末尾的-多位数后缀,而orange-fish5(数字前无连字符)、red-blue123(数字前是字母而非连字符)这类不符合规则的标识符会完全保留。
内容的提问来源于stack exchange,提问作者bziggy
相关产品推荐
相关产品推荐

