将十六进制颜色代码与CSS代码分开的正则表达式 - 非平凡情况

时间:2015-08-08 16:22:39

标签: python css regex colors

我正在尝试使用正则表达式分离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:'来改善我的正则表达式。

请帮我列出支持十六进制颜色代码的所有属性,或者帮助我更好地使用正则表达式。

2 个答案:

答案 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})部分是捕获颜色的部分,您可以根据需要对其进行修改)。

结果将如下所示:

enter image description here

希望这有效!如果没有让我知道,我会看到我可以做些什么来让它适合你的情况。

答案 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']