第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

如何使用正則表達(dá)式正確解析 Python 中的十六進(jìn)制顏色代碼?

如何使用正則表達(dá)式正確解析 Python 中的十六進(jìn)制顏色代碼?

守著一只汪 2022-06-28 17:55:50
我是 Regex 的初學(xué)者,所以我通過解決我能找到的所有練習(xí)來繼續(xù)練習(xí)。在其中之一中,我需要使用 Regex 和 Python 從 HTML 源代碼中提取所有十六進(jìn)制代碼。根據(jù)練習(xí),發(fā)現(xiàn)十六進(jìn)制代碼的規(guī)則是:它以#開頭它有 3 或 6 位數(shù)字每個數(shù)字都在 0-F 范圍內(nèi)(字符串不區(qū)分大小寫)示例輸入是這樣的:#BED{    color: #FfFdF8; background-color:#aef;    font-size: 123px;    background: -webkit-linear-gradient(top, #f9f9f9, #fff);}#Cab{    background-color: #ABC;    border: 2px dashed #fff;}所需的輸出是:#FfFdF8#aef#f9f9f9#fff#ABC#fff#BED并且#Cab將被省略,因為它們不是十六進(jìn)制顏色。我嘗試了這段代碼,以解決問題:import retext = """#BED{    color: #FfFdF8; background-color:#aef;    font-size: 123px;    background: -webkit-linear-gradient(top, #f9f9f9, #fff);}#Cab{    background-color: #ABC;    border: 2px dashed #fff;} """r = re.compile(r'#[0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}')a = r.findall(text)print(a)獲得的輸出:['#BED', '#FfF', '#aef', '#f9f', '#fff', '#Cab', '#ABC', '#fff']它工作正常,除了它沒有捕捉到 6 位代碼并且它沒有消除實際上不是十六進(jìn)制顏色代碼的兩個標(biāo)簽。我誤會了什么?我查看了其他嘗試,但他們沒有提供正確的答案。我正在使用 Python 3.7.4 和最新版本的 PyCharm。
查看完整描述

3 回答

?
森欄

TA貢獻(xiàn)1810條經(jīng)驗 獲得超5個贊

你可以試試

#(?:[0-9A-Fa-f]{6}|[0-9A-Fa-f]{3})(?=;|[^(]*\))

所以這里的想法是6如果沒有找到匹配字符匹配,則以更高的優(yōu)先級匹配字符長度3,以確保它不匹配#BED或者我們需要匹配十六進(jìn)制顏色代碼的終止,所以我們使用帶有交替的前瞻

http://img1.sycdn.imooc.com//62bad04d0001eec405850396.jpg

查看完整回答
反對 回復(fù) 2022-06-28
?
桃花長相依

TA貢獻(xiàn)1860條經(jīng)驗 獲得超8個贊

您可以使用


r = re.compile(r'#[0-9A-Fa-f]{3}(?:[0-9A-Fa-f]{3})?(?!$)', re.M)

見證明


示例 Python 代碼:


import re

regex = r"#[0-9A-Fa-f]{3}(?:[0-9A-Fa-f]{3})?(?!$)"

test_str = ("#BED\n"

    "{\n"

    "    color: #FfFdF8; background-color:#aef;\n"

    "    font-size: 123px;\n"

    "    background: -webkit-linear-gradient(top, #f9f9f9, #fff);\n"

    "}\n"

    "#Cab\n"

    "{\n"

    "    background-color: #ABC;\n"

    "    border: 2px dashed #fff;\n"

    "}")

matches = re.findall(regex, test_str, re.MULTILINE)

print(matches)


查看完整回答
反對 回復(fù) 2022-06-28
?
梵蒂岡之花

TA貢獻(xiàn)1900條經(jīng)驗 獲得超5個贊

一方面,您可以匹配 6 位代碼,否則匹配 3 位代碼將首先匹配其中一半(因此不匹配完整的 6 位代碼)。但是,由于您還只想匹配 CSS 屬性規(guī)則,而不是選擇器,請?zhí)崆安檎?code>;、,)

(?i)#(?:[0-9a-f]{6}|[0-9a-f]{3})(?=[;,)])

https://regex101.com/r/BtZaoV/2

如果您還需要能夠排除組合選擇器,例如#BED, foo {,您可以先查看非{s 后跟}

(?i)#(?:[0-9a-f]{6}|[0-9a-f]{3})(?=[^{]*})

https://regex101.com/r/BtZaoV/3

使用不區(qū)分大小寫的標(biāo)志來保持 DRY。(您也可以{3}){1,2}用來避免重復(fù)字符集,但這會使模式更難閱讀 IMO)


查看完整回答
反對 回復(fù) 2022-06-28
  • 3 回答
  • 0 關(guān)注
  • 391 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號