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

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

我正在嘗試從 python 正則表達式解析字符串 - 當字符串包含“:”時無法解析

我正在嘗試從 python 正則表達式解析字符串 - 當字符串包含“:”時無法解析

拉風的咖菲貓 2023-06-27 16:08:51
我有string = ":61:2002190219C45612.4S202EXCOL3654628815//CT56748005:86:/BENM/Unitech Imports/REM//58970.047:61:2002190219C30000S103LCADV5674920204//CT56748006:86:/BENM/Gravity Imports/REM//INV/FEB20/446301"pattern = "61:[A-Za-z0-9 \/,\-_\.]{1,}:86:[A-Za-z0-9 \/\.\-]{1,}"re.findall(pattern , string) # - > this is giving list with 2 element 但是當字符串中有“:”"61:[A-Za-z0-9 \/,\-_\.:]{1,}:86:[A-Za-z0-9 \/\.\-:]{1,}"時,我將正則表達式修改為,然后它在一個列表中給出完整的內容。modified_string = ":61:2002190219C45612.4S202EXCOL:3654628815//CT56748005:86:/BENM/Unitech Imports/REM//58970.047:61:2002190219C30000S103LCAD:V5674920204//CT56748006:86:/BENM/Gravity Imports/REM//INV/FEB20/446301"我嘗試了多種選項,但無法獲得所需的輸出。預期產出re.findall(pattern,modified_string)# => ['61:2002190219C45612.4S202EXCOL:3654628815//CT56748005:86:/BENM/Unitech Imports/REM//58970.047','61:2002190219C30000S103LCAD:V5674920204//CT56748006:86:/BENM/Gravity Imports/REM//INV/FEB20/446301' ]
查看完整描述

2 回答

?
慕工程0101907

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

由于模式以 開頭并且61:僅出現一次:81:,因此您可以使用交替來匹配字符類中列出的任何字符,或者僅在不直接后跟或使用否定前瞻時[A-Za-z0-9 \/,_.-]匹配 a 。:61:86:

61:(?:[\w /,.-]|:(?!61:|86:))*:86:(?:[A-Za-z0-9 /.-]|:(?!61:|86:))*

正則表達式演示


查看完整回答
反對 回復 2023-06-27
?
MM們

TA貢獻1886條經驗 獲得超2個贊

冒號似乎是表明匹配已結束的唯一指示符,因此允許冒號成為匹配的一部分會刪除分隔符。也就是說,您可以通過將量詞更改{1,}為非貪婪(即返回最短的可能匹配而不是最長的匹配)來獲得所需的結果。一般來說,這是一個有點老套的解決方案,表明您可能需要重新考慮您的解析策略。但是如果你?在each后面添加一個{1,},你會再次得到兩個匹配。


另外,您可以縮短{1,}為+.


pattern = re.compile(r"61:[A-Za-z0-9 \/,\-_\.:]+?:86:[A-Za-z0-9 \/\.\-:]+?")

pattern.findall(string)

#=> ['61:2002190219C45612.4S202EXCOL3654628815//CT56748005:86:/',

     '61:2002190219C30000S103LCADV5674920204//CT56748006:86:/']


查看完整回答
反對 回復 2023-06-27
  • 2 回答
  • 0 關注
  • 182 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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