首页 > 解决方案 > 如何通过正则表达式删除基于相同索引的唯一字符

问题描述

在学习 SO 的问题之一时,使用正则表达式提取值。

我想知道如果每一行中的字符都相同并且匹配相同的索引位置,我们如何实现正则表达式来删除所有字符。

下面是数据框:

print(df)
   column1
0  [b,e,c]
1  [e,a,c]
2  [a,b,c]

正则表达式:

 df.column1.str.extract(r'(\w,\w)')

 print(df)
  column1
0     b,e
1     e,a
2     a,b

在上面的正则表达式中,它提取了所需的字符,但我也想保留[]它。

标签: pythonregexregex-group

解决方案


您可以使用

df['column2'] = df['column1'].str.replace(r'(?s).*?\[(\w,\w).*', r'[\1]', regex=True)
df['column2'] = '[' + df['column1'].str.extract(r'(\w,\w)') + ']'

在该.str.replace方法中,(?s).*?\[(\w,\w).*尽可能少地匹配任何零个或多个字符,然后是 a [,然后将一个单词 char + comma + 一个单词 char 捕获到 Group 1 ( \1) 中,然后是字符串的其余部分,并将匹配替换为[+ Group 1价值 + ]

在第二种方法中,[]添加到提取结果中,此解决方案最适合您的玩具示例。

这是一个熊猫测试:

>>> import pandas as pd
>>> df = pd.DataFrame({'column1':['[b,e,c]']})
>>> df['column1'].str.replace(r'(?s).*?\[(\w,\w).*', r'[\1]', regex=True)
0    [b,e]
Name: column1, dtype: object

>>> '[' + df['column1'].str.extract(r'(\w,\w)') + ']'
       0
0  [b,e]

推荐阅读