我对正则表达式很有经验,但是对于在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