Я думаю, что вам нужно либо одно из следующих решений, либо другое
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']
Регулярные выражения чрезвычайно мощны при условии, что после определенной организации должно быть достаточно частей строкотносительная стабильность среди переменных других частей, которые предназначены для улавливания.Если анализируемый текст становится слишком рыхлым по своей структуре, становится невозможным написать регулярное выражение.
Есть ли еще много других структур типа "арлекинового пэчворка", возможных для ваших строк ??