python - 如何通过正则表达式删除基于相同索引的唯一字符
问题描述
在学习 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
在上面的正则表达式中,它提取了所需的字符,但我也想保留[]
它。
解决方案
您可以使用
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]
推荐阅读
- unity3d - 如何在 Vuforia 中为不同的 ImageTargets 正确添加事件?
- c# - 如果提供的类型具有可用的隐式转换,为什么我们不能转换为泛型类型?
- assembly - 装配中大量斐波那契的问题
- sql - postgres - 在 CASE 子句中使用 SIMILAR TO
- animation - 有状态和无状态 Flutter UI 的混合未更新
- c++11 - 多个具有相同名称的标准标头 - 包含哪一个以及如何更改它?
- visual-studio - CMake:将 Visual Studio 项目属性设置为从父级继承(属性表)
- javascript - 如何防止我的 keyUp 事件侦听器多次触发
- javascript - 两个选定的输入具有相同的值
- android - 如何在工具栏中制作圆角菜单?