import re
p = re.compile(ur'''(?P<Alternation1>
\$\{(?P<braced>[_a-zA-Z][a-zA-Z0-9]*(?::[_a-zA-Z]\w*)+)
\}
)
|
(?P<Alternation2>
\$(?P<named>[_a-zA-Z][a-zA-Z0-9]*(?::[_a-zA-Z]\w*)+
)
)
''', re.VERBOSE)
test_str = u"asdasd $asd:sd + ${asd123:asd} $HOME $$asd"
print [x for x in re.findall(p, test_str)]
aW1wb3J0IHJlCnAgPSByZS5jb21waWxlKHVyJycnKD9QPEFsdGVybmF0aW9uMT4KICAgICBcJFx7KD9QPGJyYWNlZD5bX2EtekEtWl1bYS16QS1aMC05XSooPzo6W19hLXpBLVpdXHcqKSspCiAgICAgXH0KICAgICApCiAgICAgfAogICAgICg/UDxBbHRlcm5hdGlvbjI+CiAgICAgIFwkKD9QPG5hbWVkPltfYS16QS1aXVthLXpBLVowLTldKig/OjpbX2EtekEtWl1cdyopKwogICAgICkKICAgICkKJycnLCByZS5WRVJCT1NFKQp0ZXN0X3N0ciA9IHUiYXNkYXNkICRhc2Q6c2QgKyAke2FzZDEyMzphc2R9ICRIT01FICQkYXNkIgogCnByaW50IFt4IGZvciB4IGluIHJlLmZpbmRhbGwocCwgdGVzdF9zdHIpXQ==