我有一個列表cols如下:['Wed Estimate 6/10', 'Thu Estimate 6/11', 'Fri Estimate 6/12', 'Next Estimate 6/15-6/19']當我嘗試以下操作時:re.findall(r'\s\d/\d\w-\d/\d\w', cols[3])我明白[' 6/15-6/19']了,但是當我嘗試時[re.findall(r'\s\d/\d\w|\s\d/\d\w-\d/\d\w', x) for x in cols]我得到[[' 6/10'], [' 6/11'], [' 6/12'], [' 6/15']]我想實現以下目標:[[' 6/10'], [' 6/11'], [' 6/12'], [' 6/15-6/19']]我不確定為什么正則表達式的行為如上所述。
1 回答

慕姐8265434
TA貢獻1813條經驗 獲得超2個贊
您可以嘗試以下操作嗎:
import re
lst = ['Wed Estimate 6/10', 'Thu Estimate 6/11', 'Fri Estimate 6/12', 'Next Estimate 6/15-6/19']
lst_new = [re.findall(r'\d+\/\d+(?:-\d+\/\d+)?', x) for x in lst]
print(lst_new)
退貨:
[['6/10'], ['6/11'], ['6/12'], ['6/15-6/19']]
該模式并不太難,但我沒有使用交替,而是使用了一個可選的非捕獲組來用于##/##-##/##模式。我相信這會更快地產生結果。
以上將排除前導空格。不確定這是否是特定要求。此外,如果您想將##/##模式中的數字數量限制為最多兩個,則可以\d{1,2}\/\d{1,2}(?:-\d{1,2}\/\d{1,2})?改用。
另一個注意事項;如果字符串不會比此示例數據更復雜,您也可以拆分字符串。例如:
lst_new = [[x.rpartition(' ')[2]] for x in lst]
要么:
lst_new = [[x.rsplit(' ', 1)[1]] for x in lst]
添加回答
舉報
0/150
提交
取消