我有如下的python字串
"1234_4534_41247612_2462184_2131_ABCDEF.GHI.xlsx"
"1234_4534__sfhaksj_DHJKhd_hJD_41247612_2462184_2131_PQRST.GHI.xlsx"
"12JSAF34_45aAF34__sfhaksj_DHJKhd_hJD_41247612_2f462184_2131_JKLMN.OPQ.xlsx"
"1234_4534__sfhaksj_DHJKhd_hJD_41FA247612_2462184_2131_WXY.TUV.xlsx"
我想做以下
a)提取出現在第一個點之前和之后的字符
b)我想要的關鍵字總是在最后一個_符號之后找到
例如:如果您查看第二個輸入字串,我只想PQRST.GHI作為輸出。它在 last 之后_和 1st 之前.,我們也在 1st 之后得到關鍵字.
所以,我嘗試了以下
for s in strings:
after_part = (s.split('.')[1])
before_part = (s.split('.')[0])
before_part = qnd_part.split('_')[-1]
expected_keyword = before_part "." after_part
print(expected_keyword)
雖然這可行,但這絕對不是撰寫正則運算式的好方法。
有沒有其他更好的方法來寫這個?
我希望我的輸出如下所示。如您所見,我們在第一個dot字符之前和之后得到關鍵字
ABCDEF.GHI
PQRST.GHI
JKLMN.OPQ
WXY.TUV
uj5u.com熱心網友回復:
嘗試(regex101):
import re
strings = [
"1234_4534_41247612_2462184_2131_ABCDEF.GHI.xlsx",
"1234_4534__sfhaksj_DHJKhd_hJD_41247612_2462184_2131_PQRST.GHI.xlsx",
"12JSAF34_45aAF34__sfhaksj_DHJKhd_hJD_41247612_2f462184_2131_JKLMN.OPQ.xlsx",
"1234_4534__sfhaksj_DHJKhd_hJD_41FA247612_2462184_2131_WXY.TUV.xlsx",
]
pat = re.compile(r"[^.] _([^.] \.[^.] )")
for s in strings:
print(pat.search(s).group(1))
印刷:
ABCDEF.GHI
PQRST.GHI
JKLMN.OPQ
WXY.TUV
uj5u.com熱心網友回復:
您也可以使用rsplit(). 指定maxsplit,這樣您就不會拆分超出您需要的部分(為了提高效率):
[s.rsplit('_', maxsplit=1)[1].rsplit('.', maxsplit=1)[0] for s in strings]
# ['ABCDEF.GHI', 'PQRST.GHI', 'JKLMN.OPQ', 'WXY.TUV']
uj5u.com熱心網友回復:
你可以做(??試試這里的模式)
df['text'].str.extract('_([^._] \.[^.] )',expand=False)
輸出:
0 ABCDEF.GHI
1 PQRST.GHI
2 JKLMN.OPQ
3 WXY.TUV
Name: text, dtype: object
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/510254.html
