I got the meaning of | (pipe special character) in regex, Python.
It matches either 1st or 2nd.
ex : a|b Matches either a or b.
<
You could generate the lower/upper case regex for the second word, and keep casing active:
my_regex = "PuNe|"+"".join("[{}{}]".format(x.upper(),x.lower()) for x in "MaHaRaShTrA")
that generates: PuNe|[Mm][Aa][Hh][Aa][Rr][Aa][Ss][Hh][Tt][Rr][Aa]
and re.search(my_regex,s1) without any option does what you want.