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

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

獲取所有匹配的列表

獲取所有匹配的列表

郎朗坤 2023-07-27 16:37:41
我試圖在一個大字符串中獲取完整的顏色列表(以十六進制表示),如下所示:'''#C4F407      // valid color#ZZZZZZ      // invalid colorHello there! // invalid color#F08         // invalid color45E097       // invalid color#FF00AA      // valid color...'''所以我編寫了這個正則表達式來查找它們: ^#([A-F]|[0-9]){6}$ ,它匹配只有一種顏色的字符串。(我的意思是re.search('^#([A-F]|[0-9]){6}$', '#C456F7'))匹配#C456F7)但是,當我使用時, re.findall('^#([A-F]|[0-9]){6}$', largeString) 我得到了 [] 當我應該得到的時候['#C4F407', '#FF00AA']我怎樣才能獲得所有寫得好的顏色的列表?
查看完整描述

1 回答

?
慕桂英546537

TA貢獻1848條經驗 獲得超10個贊

問題是您僅在字符串范圍內搜索。^僅匹配行開頭和$行結尾。


由于您的字符串包含更多數據,^并且$不會匹配。


將您的正則表達式更改為(#(?:[A-F]|[0-9]){6}),它將正常工作:


>>> re.findall(r'(#(?:[A-F]|[0-9]){6})', largeString)

['#C4F407', '#FF00AA']

請注意,我?:在內括號中包含了 a,并且在外括號中包含了 a。這樣,我們的正則表達式將不會捕獲內括號內的內容,而只會捕獲全顏色。


另請注意,我使用了r''正則表達式字符串。它表明 python 解釋器不應解釋轉義字符,例如\b和 將它們留給正則表達式。我建議在所有正則表達式字符串上使用它們。


\b為了避免匹配超出第六個字符,您可以在正則表達式的末尾添加邊框,例如(#(?:[A-F]|[0-9]){6})\b:


>>> largeString = '''

#C4F407      // valid color

#ZZZZZZ      // invalid color

Hello there! // invalid color

#F08         // invalid color

45E097       // invalid color

#FF00AA      // valid color

#0000000     // invalid color

...

'''

>>> re.findall(r'(#(?:[A-F]|[0-9]){6})\b', largeString)

['#C4F407', '#FF00AA']


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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