2017-09-24 40 views
1

我的熊貓數據框列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的第一次出現,但是這肯定並非如此,因爲上面看到的。

做上述正則表達式的正確方法是什麼?

回答

3

與分裂的幫助,雖然我更喜歡的正則表達式,即

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 

或者由於@Zero

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

''/ IMG'+ df.center.str.rsplit('/ IMG',1).str [1]'也許? – Zero

+0

我使用str.split,但不能訪問[1],即我使用'str [1]'。謝謝你,先生。 – Dark

2

使用'.*(?=IMG/)' - 匹配字符串中最後一個IMG/之前的所有內容。

In [3165]: df.center.str.replace('.*(?=IMG/)', '') 
Out[3165]: 
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 

.* - 匹配一切 (?=IMG/) - 直到你碰到模式IMG/捕獲組無視即IMG格局。稍後替換捕獲的組。

+0

以供將來參考,你可以解釋每個什麼正則表達式符號呢? –

+0

@零是我的解釋哦?如果我錯了,請編輯它。 – Dark

相關問題