我需要有關 Python Pandas 資料框的正則運算式的幫助。測驗字串將是:
s = pd.Series(['xslF345X03/was-form4_163347386959085.xml', 'xslF345X03/wf-form4_163347386959085.xmlasdf', 'xslF345/X03/wf-form4_163347386959085.xml'])
我想提取以便我得到這樣的東西:
xslF345X03/was-form4_163347386959085.xml Extract: /was-form4_163347386959085.xml
xslF345X03/wf-form4_163347386959085.xmlasdf Do not extract because the ending is not .xml
xslF345/X03/wf-form4_163347386959085.xml Extract starting from the last '/' character: /wf-form4_163347386959085.xml
我想我需要遵循 Pandas 代碼來使用正則運算式提取:
s.str.extract(...)
先感謝您 :-)
uj5u.com熱心網友回復:
使用str.extract:
>>> s.str.extract(r'.*/(.*\.xml)$')
0
0 was-form4_163347386959085.xml
1 NaN
2 wf-form4_163347386959085.xml
uj5u.com熱心網友回復:
您可以檢查str.endswith然后傳遞給np.where
np.where(s.str.endswith('.xml'),s.str.rsplit('/',n=1).str[-1],np.nan)
Out[99]:
array(['was-form4_163347386959085.xml', nan,
'wf-form4_163347386959085.xml'], dtype=object)
uj5u.com熱心網友回復:
要從最后一個 '/' 字符(包括/)開始提取到 結尾.xml,請使用str.extract(),如下所示:
s.str.extract(r'(/(?!.*/).*\.xml)$')
正則運算式演示
正則運算式詳情:
( - 開始捕獲組 str.extract()
/ - 匹配符號/字面意思
(?!.*/) - 負前瞻正則運算式斷言沒有進一步的符號 / 在它之后(即確保符號 / 是最后一個)
.* - 匹配零個或多個字符
\. - 從字面上匹配一個點(轉義以避免與正則運算式元字符混淆)
xml -xml從字面上匹配字串
) - 結束捕獲組 str.extract()
$ - 在行尾斷言(以確保.xml是在最后)
結果:
0
0 /was-form4_163347386959085.xml
1 NaN
2 /wf-form4_163347386959085.xml
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/323640.html
上一篇:正則運算式匹配字串中的奇數
