我认为您需要的是以下解决方案之一或其他
ss = ''' background: #f09 url('images#06F');
background=#00f url('images #889');
background:#E4aaa0 url('images#890');
background: #fff #dddddd; '''
print ss
import re
three = '(?:[0-9A-Fa-f]{3})'
regx = re.compile('^ *background[ =:]*#(%s{1,2})' % three,re.MULTILINE)
print regx.findall(ss)
print '-----------------------------------------------------'
regx = re.compile('(?:(?:^ *background[ =:]*)|(?:(?<=#%s)|(?<=#%s%s)) +)'
'#(%s{1,2})' % (three,three,three,three),
re.MULTILINE)
print regx.findall(ss)
结果
background: #f09 url('images#06F');
background=#00f url('images #889');
background:#E4aaa0 url('images#890');
background: #fff #dddddd;
['f09', '00f', 'E4aaa0', 'fff']
-----------------------------------------------------
['f09', '00f', 'E4aaa0', 'fff', 'dddddd']
编辑 1
ss = ''' background: #f09 url('images#06F');
background=#00f url('images #889');
color:#E4aaa0 url('images#890');
background: #fff #dddddd#125e88 #ae3;
Walter (Elias) Disney: #f51f51 '''
print ss+'\n'
import re
three = '(?:[0-9A-Fa-f]{3})'
regx = re.compile('^ *[^=:]+[ =:]*#(%s{1,2})' % three,re.MULTILINE)
print regx.findall(ss)
print '-----------------------------------------------------'
regx = re.compile('(?:(?:^ *[^=:]+[ =:]*)|(?:(?<=#%s)|(?<=#%s%s)) *)'
'#(%s{1,2})' % (three,three,three,three),
re.MULTILINE)
print regx.findall(ss)
结果
background: #f09 url('images#06F');
background=#00f url('images #889');
color:#E4aaa0 url('images#890');
background: #fff #dddddd#125e88 #ae3;
Walter (Elias) Disney: #f51f51
['f09', '00f', 'E4aaa0', 'fff', 'f51f51']
-----------------------------------------------------
['f09', '00f', 'E4aaa0', 'fff', 'dddddd', '125e88', 'ae3', 'f51f51']
编辑 2
ss = ''' background: #f09 url('images#06F');
background=#00f url('images #889');
color:#E4aaa0 url('images#890');
background: #fff #dddddd#125e88 #ae3;
Walter (Elias) Disney: #f51f51
background: -webkit-gradient(linear, from(#000000), to(#ffffff));. '''
print ss+'\n'
import re
three = '(?:[0-9A-Fa-f]{3})'
preceding = ('(?:(?:^[^#]*)'
'|'
'(?:(?<=#%s)'
'|'
'(?<=#%s%s)'
'|'
'(?<= to\()'
')'
')') % (three,three,three)
regx = re.compile('%s *#(%s{1,2})' % (preceding,three), re.MULTILINE)
print regx.findall(ss)
结果
background: #f09 url('images#06F');
background=#00f url('images #889');
color:#E4aaa0 url('images#890');
background: #fff #dddddd#125e88 #ae3;
Walter (Elias) Disney: #f51f51
background: -webkit-gradient(linear, from(#000000), to(#ffffff));.
['f09', '00f', 'E4aaa0', 'fff', 'dddddd', '125e88', 'ae3', 'f51f51', '000000', 'ffffff']
正则表达式非常强大,条件是必须有足够的字符串部分遵循某个组织,在要捕获的可变其他部分之间具有相对稳定性。如果分析的文本在结构上变得过于松散,就不可能编写正则表达式。
您的琴弦是否还有许多其他“类似 Harlequin 的拼凑”结构?