亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過正則表達式查找符號之間的值,其中符號可能是值的一部分

通過正則表達式查找符號之間的值,其中符號可能是值的一部分

慕妹3146593 2021-06-08 17:19:14
有一個字符串,我試圖從符號之間提取值,但符號或分隔符也恰好是字符串的一部分。假設下面的字符串:message =': :1:1st message:2a:2nd message:x:this is where it fails status: fail :3:3rd message'和想要的結果:['1st message','2nd message','this is where it fails status: fail','3rd message']當前代碼和結果:import redef trans(text):    text = text+':'    tag = re.findall(r':(.*?):',text)    return [i for i in tag if not i.isspace()]trans(message)>>['1st message', '2nd message', 'this is where it fails status', '3']知道如何形成我的正則表達式以包含'status: fail '作為結果一部分的模式嗎?
查看完整描述

3 回答

?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

嘗試使用負前瞻r'[^\s]:(.*?):(?!\s)。

結果:

['1st message',

 '2nd message',

 'this is where it fails status: fail ',

 '3rd message']

[^\s]是不匹配前面有空格字符的冒號,因此它修復3rd message.

:(?!\s)是匹配一個冒號,后面沒有空格字符,所以它修復了status: fail。

換句話說,我添加的兩部分都在要匹配的子字符串周圍創建了一個邊距,該邊距不能由前面或后面跟有空格字符的冒號組成。


查看完整回答
反對 回復 2021-06-22
?
四季花海

TA貢獻1811條經驗 獲得超5個贊

您可以使用

re.findall(r'(?<=:\S:).+?(?=\s*:.:|$)', message)

后視冒號內的字符(或字符串的開頭),然后匹配并延遲重復任何字符,直到先行看到冒號內的另一個字符(或字符串的結尾)。

輸出:

['1st message', '2nd message', 'this is where it fails status: fail', '3rd message']


查看完整回答
反對 回復 2021-06-22
  • 3 回答
  • 0 關注
  • 215 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號