如何用正则表达式保留Pandas列中第二个脱字符前的内容?
解决方法
你的需求是保留字符串中第二个^之前的内容(即前两个由^分隔的部分),之前用的正则r'[\^].+$'会匹配第一个^到结尾的所有内容,所以会直接删掉第一个^之后的全部,不符合预期。
下面提供两种可行的处理方式:
方法1:字符串分割拼接(直观易懂,无需正则)
利用Pandas的字符串分割方法,指定最多分割2次,取前两部分再拼接:
df['你的列名'] = df['你的列名'].str.split('^', n=2).str[:2].str.join('^')
n=2:限制最多分割2次,将字符串拆分为[第一部分, 第二部分, 剩余部分]的列表str[:2]:取列表的前两个元素str.join('^'):用^将前两部分重新拼接
方法2:正则替换
如果偏好正则,可以用捕获组保留前两部分,替换掉第二个^及之后的内容:
df['你的列名'] = df['你的列名'].str.replace(r'^([^^]+\^[^^]+)\^.*$', r'\1', regex=True)
正则解释:
^([^^]+\^[^^]+):捕获组,匹配"非^字符 +^+ 非^字符",也就是你需要保留的前两部分\^.*$:匹配第二个^以及后面的所有内容- 替换时用
\1引用捕获组的内容,实现保留目标部分
或者用更简洁的正向后顾断言写法:
df['你的列名'] = df['你的列名'].str.replace(r'(?<=[^^]+\^[^^]+)\^.*$', '', regex=True)
内容的提问来源于stack exchange,提问作者hulio_entredas
相关产品推荐
相关产品推荐

