python正则表达式匹配项不包含数字符号(#)

时间:2018-06-28 22:32:18

标签: python regex

我对正则表达式很有经验,但是对于在Python(特别是Python 3)中使用正则表达式还是陌生的。以下脚本的行为对我来说很奇怪。目标是匹配我的多行字符串(如#FfFdF8)中的十六进制颜色,但不匹配#BED,因为这是CSS说明符。

无论如何,该脚本总体上可以正常工作,除了findall()返回的字符串中不包含数字符号(#)本身。因此它将返回例如“ aef”而不是“ #aef”。我不认为我会忽略什么,因为#不是特殊的正则表达式字符,并且findall()应该以字符串形式返回所有匹配项。有想法吗?

import re

mystr = """
#BED
{
    color: #FfFdF8; background-color:#aef;
    font-size: 123px;
}
"""

lines = mystr.split('\n')

p = re.compile(r'#([a-zA-Z0-9]{3}|[a-zA-Z0-9]{6})\b')
for line in lines:
    if (line[0:4] == "    "):
        matches = p.findall(line)
        for m in matches:
            print(m)

实际输出:

FfFdF8
aef

所需的输出:

#FfFdF8
#aef

0 个答案:

没有答案