我有一個資料框架列,如下所示:
我有一個資料框架列。
df['col1']
['cat-dog asd-pwr sdf'/span>, 'cat-goat asd-pwr2 sdf'/span>, 'cat asd-pwr3 sdf'/span>]
我需要提取以下內容:
我需要提取以下內容。
['asd-pwr', 'asd-pwr2', 'asd-pwr3']
即最后一對由-
我試了一下:
import re
df['col1'].str.extract(r's[a-zA-Z]*-[a-zA-Z]*s',flags=re.IGNORECASE)
首先,我的regex結構甚至未能如愿發現任何一對子字串。
uj5u.com熱心網友回復:
你可以使用
import pandas as pd
df = pd. DataFrame({'col1': ['cat-dog asd-pwr sdf', 'cat-goat asd-pwr2 sdf', 'cat asd-pwr3 sdf']})
>>> df['col1'].str.extract(r'(?:.*W)? (w -w ) ' )
0.
0 asd-pwr
1 asd-pwr2
2 asd-pwr3
或者,如果左邊有字串的開頭或空白,你也可以使用
。r'(?:.*s)? (w -w )'/span>
詳情:
(?:.*W)?- 一個可選的序列,由除換行符以外的任何零個或多個字符組成,盡可能多,然后是一個非字符(s匹配一個空白)(w -w )- 第一組:一個或多個單詞字符,-和一個或多個單詞字符。
由于.*是貪婪的,圓括號(又稱捕獲括號)之間的模式的最后部分得到連字符的最后出現。
uj5u.com熱心網友回復:
這個詞組應該可以解決這個問題
w*-w*(?=(s|$)w*.*$)
只從產生的匹配陣列中取最后一個物件。
uj5u.com熱心網友回復:
你可以使用:
import re
df['col1'].str.extract(r's*(w -w )(?!.*-)s*', flags=re.IGNORECASE)
這里,我們使用w而不是[a-zA-Z],因為你還想提取pwr之后的數字。
我們還使用了負的lookahead (?!.*-)來確保當前匹配的子串是字串中最后一個帶連字符的子串-。
結果:
0
0 asd-pwr
1 asd-pwr2
2 asd-pwr3
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/323759.html
標籤:
下一篇:從字串中獲取src值
