gpt4 book ai didi

python - 如何使用正则表达式在 Python 中正确解析十六进制颜色代码?

转载 作者:行者123 更新时间:2023-11-28 21:31:19 25 4
gpt4 key购买 nike

我是 Regex 的初学者,所以我通过解决我能找到的所有练习来不断练习。其中之一,我需要使用 Regex 和 Python 从 HTML 源代码中提取所有十六进制代码。根据练习,识别十六进制代码的规则是:

  1. 以#开头
  2. 它有 3 位或 6 位数字
  3. 每个数字都在0-F范围内(字符串不区分大小写)

示例输入是这样的:

#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 将被省略,因为它们不是十六进制颜色。

我试过这段代码,解决了这个问题:

import re

text = """
#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 位代码并且它没有消除实际上不是十六进制颜色代码的两个标签。

我错了什么?我查看了其他尝试,但他们没有提供正确答案。我正在使用 Python 3.7.4 和最新版本的 PyCharm。

最佳答案

一方面,您可以首先匹配 6 位代码,否则匹配 3 位代码将首先匹配其中一半(因此不会匹配完整的 6 位代码)。但由于您还想只匹配 CSS 属性规则,而不是选择器,请先查找 ;):

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

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

如果您还需要能够排除组合选择器,例如 #BED, foo {,您可以先查找非 { 后跟 } :

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

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

使用不区分大小写的标志来保持干燥。 (您也可以使用 {3}){1,2} 来避免重复字符集,但这会使模式更难阅读 IMO)

关于python - 如何使用正则表达式在 Python 中正确解析十六进制颜色代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58472772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com