haystack1 = '''**GS***RL*CITGO*JJ*20090518*1036*25110*X*00405
ST*423*2511*RT**GS***08247'''
haystack2 = '''**#**UPT 0000SWSAM001203081454NS /
GS*QM*TRSC*UPDS *20120309*0820*0309***#***004010'''
fail3 = 'G#' # should only match the '#'
import re
needle = re.compile(r'GS|#')
def test(**kwargs):
for k, v in kwargs.items():
m = needle.search(v)
if m:
print '{name}: {chars} characters at {start}..{end}'.format(name=k, start=m.start(), end=m.end(), chars=len(m.group()))
else:
print '{name}: no match'.format(name=k)
test(haystack1=haystack1, haystack2=haystack2, fail3=fail3)
aGF5c3RhY2sxID0gJycnKipHUyoqKlJMKkNJVEdPKkpKKjIwMDkwNTE4KjEwMzYqMjUxMTAqWCowMDQwNQpTVCo0MjMqMjUxMSpSVCoqR1MqKiowODI0NycnJwpoYXlzdGFjazIgPSAnJycqKiMqKlVQVCAgICAgMDAwMFNXU0FNMDAxMjAzMDgxNDU0TlMgICAgICAvCkdTKlFNKlRSU0MqVVBEUyAgKjIwMTIwMzA5KjA4MjAqMDMwOSoqKiMqKiowMDQwMTAnJycKCmZhaWwzID0gJ0cjJyAjIHNob3VsZCBvbmx5IG1hdGNoIHRoZSAnIycKCmltcG9ydCByZQpuZWVkbGUgPSByZS5jb21waWxlKHInR1N8IycpCgpkZWYgdGVzdCgqKmt3YXJncyk6CiAgICBmb3IgaywgdiBpbiBrd2FyZ3MuaXRlbXMoKToKICAgICAgICBtID0gbmVlZGxlLnNlYXJjaCh2KQogICAgICAgIGlmIG06CiAgICAgICAgICAgIHByaW50ICd7bmFtZX06IHtjaGFyc30gY2hhcmFjdGVycyBhdCB7c3RhcnR9Li57ZW5kfScuZm9ybWF0KG5hbWU9aywgc3RhcnQ9bS5zdGFydCgpLCBlbmQ9bS5lbmQoKSwgY2hhcnM9bGVuKG0uZ3JvdXAoKSkpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJpbnQgJ3tuYW1lfTogbm8gbWF0Y2gnLmZvcm1hdChuYW1lPWspCiAgICAgICAgICAgIAp0ZXN0KGhheXN0YWNrMT1oYXlzdGFjazEsIGhheXN0YWNrMj1oYXlzdGFjazIsIGZhaWwzPWZhaWwzKQ==