Python は \uxxxx を文字列リテラル内の Unicode 文字エスケープとして扱います (たとえば、u"\u2014" は Unicode 文字 U+2014 として解釈されます)。しかし、標準の正規表現モジュールが \uxxxx をユニコード文字として扱わないことを発見しました (Python 2.7)。例:
codepoint = 2014 # Say I got this dynamically from somewhere
test = u"This string ends with \u2014"
pattern = r"\u%s$" % codepoint
assert(pattern[-5:] == "2014$") # Ends with an escape sequence for U+2014
assert(re.search(pattern, test) != None) # Failure -- No match (bad)
assert(re.search(pattern, "u2014")!= None) # Success -- This matches (bad)
明らかに、正規表現パターンを文字列リテラルとして指定できる場合、正規表現エンジン自体が \uxxxx エスケープを理解した場合と同じ効果が得られます。
test = u"This string ends with \u2014"
pattern = u"\u2014$"
assert(pattern[:-1] == u"\u2014") # Ends with actual unicode char U+2014
assert(re.search(pattern, test) != None)
しかし、パターンを動的に構築する必要がある場合はどうでしょうか?