我正在尝试使用正则表达式分离CSS代码中使用的所有颜色代码 下面给出了一个示例CSS代码:
#ffffff
{
color: #cccaaa; background-color:#abcdef;
font-size: 123px;
text = "fff";
}
#ABC
{
background-color:#123456
}
这里,颜色代码是#cccaaa,#abcded和#123456。但是#ffffff和#ABC在这里不是颜色代码。
我使用的正则表达式是:
\b(?=((?:#?[\da-fA-F]{3}){1,2})[^\w][;\s]*)\b
我想提高我的正则表达式。为了改进,我想知道所有支持Hex颜色代码的CSS属性。
我发现他们中的一些人喜欢:
背景颜色,颜色和边框颜色。这是全部还是我错过了什么。我想我可以使用'color:'来改善我的正则表达式。
请帮我列出支持十六进制颜色代码的所有属性,或者帮助我更好地使用正则表达式。
答案 0 :(得分:2)
好吧,做好准备......
\:(?:(?!(?:\;|\n|\r))[\w\W])*?\#((?:[a-fA-F0-9]{3}){1,2})(?:(?!(?:\;|\n|\r))[\w\W])*?(?:\;|\n|\r)
应该有用。
更新:好的,现在应该可行。它现在在:
和;
之间或行的末尾之间进行检查,而不是在括号之间进行原始解决方案检查。在该检查内部,它将检查有效的十六进制颜色并捕获它(代码的中间部分,#((?:[A-f0-9]{3}){1,2})
部分是捕获颜色的部分,您可以根据需要对其进行修改)。
结果将如下所示:
希望这有效!如果没有让我知道,我会看到我可以做些什么来让它适合你的情况。
答案 1 :(得分:2)
我只会在括号{ }
分两步执行并使用for循环使得正则表达式更具可读性,并且可以使用单一的正则表达式以不可能的方式(或者最好是非常困难)对上下文敏感。
css = """
#ffffff {
color: #cccaaa; background-color:#abcdef;
font-size: 123px;
text = "fff";
}
#ABC {
background-color:#123456
}
"""
import re
inside_brackets = re.findall(r'\{.*?\}', css, flags=re.DOTALL)
for attributes in inside_brackets:
print(re.findall(r'#(?:[a-fA-F0-9]{3}|[a-fA-F0-9]{6})\b', attributes))
输出:
['#cccaaa', '#abcdef']
['#123456']