Skip to main content
 首页 » 编程设计

python之匹配直到第一次出现

2025年05月04日22落叶无声

我的 pandas dataframe 列 center 如下所示:

In [6]: df.center.head() 
Out[6]: 
0    /Users/sachin/uniwork/IMG/center_2017_09_17_20... 
1    /Users/sachin/uniwork/IMG/center_2017_09_17_20... 
2    /Users/sachin/uniwork/IMG/center_2017_09_17_20... 
3    /Users/sachin/uniwork/IMG/center_2017_09_17_20... 
4    /Users/sachin/uniwork/IMG/center_2017_09_17_20... 
Name: center, dtype: object 

我希望摆脱IMG 之前的所有垃圾。但是,当我执行以下字符串替换时,它会替换 IMG 周围的所有内容,包括 IMG 文件夹前后的内容。

In [7]: df.head().center.str.replace(r'[^IMG]+?','') 
Out[7]: 
0    IMG 
1    IMG 
2    IMG 
3    IMG 
4    IMG 
Name: center, dtype: object 

我假设放置 ? 会阻止它在第一次出现 IMG 之后进行搜索,但事实并非如此,如上所示。

执行上述正则表达式的正确方法是什么?

请您参考如下方法:

虽然我更喜欢正则表达式,但我更喜欢 split 的另一种方法,即

df.center.apply(lambda x : '/IMG'+x.split('IMG')[-1]) 

输出:

0    /IMG/center_2017_09_17_20... 
1    /IMG/center_2017_09_17_20... 
2    /IMG/center_2017_09_17_20... 
3    /IMG/center_2017_09_17_20... 
4    /IMG/center_2017_09_17_20... 
Name: center, dtype: object 

Or Thanks @Zero

'/IMG' + df.center.str.rsplit('/IMG', 1).str[1]