所以我有以下字串,我一直在試圖弄清楚如何以我獲得特定格式的方式操作它們。
string1-itd_jan2021-internal
string2itd_mar2021-space
string3itd_feb2021-internal
string4-itd_mar2021-moon
string5itd_jun2021-internal
string6-itd_feb2021-apollo
我希望能夠擺脫任何最后一個字串,所以我只剩下月份和年份,如下所示:
string1-itd_jan2021
string2itd_mar2021
string3itd_feb2021
string4-itd_mar2021
string5itd_jun2021
string6-itd_feb2021
我想過在 - 上使用 string.split,但后來意識到對于某些字串這是行不通的。我還考慮通過將其放入串列并切片來擺脫一定數量的字符,但最后是不同的字符長度?
有什么我可以用正則運算式或任何其他 python 模塊做的嗎?
uj5u.com熱心網友回復:
使用str.rsplit與適當的maxsplit引數:
s = s.rsplit("-", 1)[0]
您也可以使用str.split(盡管這顯然是更糟糕的選擇):
s = "-".join(s.split("-")[:-1])
或者使用正則運算式:
s = re.sub(r'-[^-]*$', '', s)
# "-[^-]*" a "-" followed by any number of non-"-"
uj5u.com熱心網友回復:
使用正則運算式:
import re
re.sub(r'([0-9]{4}).*$', r'\1', s)
uj5u.com熱心網友回復:
您可以使用rpartition另一種方法,如下所示:
>>> content = ['string1-itd_jan2021-internal' , 'string2itd_mar2021-space' , 'string3itd_feb2021-internal' , 'string4-itd_mar2021-moon' , 'string5itd_jun2021-internal' ,'string6-itd_feb2021-apollo' ]
>>> [c.rpartition('-')[0] for c in content]
['string1-itd_jan2021',
'string2itd_mar2021',
'string3itd_feb2021',
'string4-itd_mar2021',
'string5itd_jun2021',
'string6-itd_feb2021']
uj5u.com熱心網友回復:
re.sub像這樣使用:
import re
lines = '''string1-itd_jan2021-internal
string2itd_mar2021-space
string3itd_feb2021-internal
string4-itd_mar2021-moon
string5itd_jun2021-internal
string6-itd_feb2021-apollo'''
for old in lines.split('\n'):
new = re.sub(r'[-][^-] $', '', old)
print('\t'.join([old, new]))
印刷:
string1-itd_jan2021-internal string1-itd_jan2021
string2itd_mar2021-space string2itd_mar2021
string3itd_feb2021-internal string3itd_feb2021
string4-itd_mar2021-moon string4-itd_mar2021
string5itd_jun2021-internal string5itd_jun2021
string6-itd_feb2021-apollo string6-itd_feb2021
解釋:
r'[-][^-] $': 文字破折號 ( -),后跟除破折號 ( [^-])以外的任何重復 1 次或多次的字符,后跟字串的結尾 ( $)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/321795.html
