Pandas正则按规则删除点前单词末尾数字 保留首段与词内数字
实现方案
核心逻辑匹配规则
- 完全保留第一个点之前的首段内容,不做任何修改
- 仅删除非首段中,位于分片末尾、后面紧跟点或字符串结束的连续数字
- 分片内部的数字(如
grp23Symbol中的23)不做处理
通用Python正则实现
import re original_str = "Node57Name123.grpObject12.grp23Symbol43.shape52.anotherobject25.shape23" processed_str = re.sub( r'^([^.]+)\.(.*)$', lambda match: match.group(1) + '.' + re.sub(r'\d+(?=\.|$)', '', match.group(2)), original_str ) # 输出结果:Node57Name123.grpObject.grp23Symbol.shape.anotherobject.shape
Pandas场景用法
若需处理DataFrame中的字符串列,优先使用str.replace实现:
import pandas as pd # 假设原始字符串列名为 raw_str df['processed_str'] = df['raw_str'].str.replace( r'^([^.]+)\.(.*)$', lambda match: match.group(1) + '.' + re.sub(r'\d+(?=\.|$)', '', match.group(2)), regex=True )
若Pandas版本较低不支持str.replace传入函数,可改用apply实现:
df['processed_str'] = df['raw_str'].apply( lambda s: re.sub( r'^([^.]+)\.(.*)$', lambda m: m.group(1) + '.' + re.sub(r'\d+(?=\.|$)', '', m.group(2)), s ) )
正则说明
^([^.]+)\.:匹配字符串开头,捕获第一个点前的所有内容作为第一组,确保首段完全保留\d+(?=\.|$):匹配连续数字,正向环视要求数字后面必须紧跟点或字符串结束,仅删除符合该条件的数字,分片内部的数字不会被匹配
之前使用的re.sub(r"\d+","",string)会全局删除所有数字,既会误删首段的数字,也会误删分片内部的数字,不符合需求。
内容的提问来源于stack exchange,提问作者Pratik V
相关产品推荐
相关产品推荐

