2017-05-15 138 views
0

我如何能匹配下面有大熊貓extractall正則表達式:大熊貓extractall匹配

stringwithinmycolumn 
stuff, Duration: 15h:22m:33s, notstuff, 
stuff, Duration: 18h:22m:33s, notstuff, 

目前,我使用的是下面:

df.message.str.extractall(r',([^,]*?): ([^,:]*?,').reset_index() 

預期輸出:

   0    1 
match  
    0 Duration 15h:22m:33s 
    1 Duration 18h:22m:33s 

目前我無法比擬。

回答

0
In [246]: x.message.str.extractall(r',\s*(\w+):\s*([^,]*)').reset_index(level=0, drop=True) 
Out[246]: 
       0   1 
match 
0  Duration 15h:22m:33s 
0  Duration 18h:22m:33s 
1

您可以使用

,\s*([^,:]+):\s*([^,]+), 

regex demo

它匹配:

  • , - 逗號
  • \s* - 0+空格
  • ([^,:]+) - 第1組: - 0+字符比,:
  • :其他 - 冒號
  • \s* - 0+空格
  • ([^,]+) - 組2:一個或多個字符比,
  • ,其他 - 逗號(這實際上可以被刪除,但可能會保持以確保更安全的匹配。)

請注意,您可能會考慮在需要提取結構化信息時使您的正則表達式更加精確來自長串。因此,您可能希望使用字母匹配模式來匹配Duration,並且僅使用數字,冒號h,ms來提取時間值。因此,該模式將變得更加冗長:

,\s*([A-Za-z]+):\s*([\d:hms]+) 

但更安全。見another regex demo