예제 #1
0
 def test_re_escape_non_ascii_bytes(self):
     b = u'y\u2620y\u2620y'.encode('utf-8')
     b_escaped = re.escape(b)
     self.assertEqual(b_escaped, b'y\\\xe2\\\x98\\\xa0y\\\xe2\\\x98\\\xa0y')
     self.assertMatch(b_escaped, b)
     res = re.findall(re.escape(u'\u2620'.encode('utf-8')), b)
     self.assertEqual(len(res), 2)
예제 #2
0
 def test_re_escape_non_ascii(self):
     s = u'xxx\u2620\u2620\u2620xxx'
     s_escaped = re.escape(s)
     self.assertEqual(s_escaped, u'xxx\\\u2620\\\u2620\\\u2620xxx')
     self.assertMatch(s_escaped, s)
     self.assertMatch(u'.%s+.' % re.escape(u'\u2620'), s,
                      u'x\u2620\u2620\u2620x', (2, 7), re.search)
예제 #3
0
 def test_re_escape_byte(self):
     alnum_chars = (string.ascii_letters + string.digits).encode('ascii')
     p = ''.join(chr(i) for i in range(256))
     for b in p:
         if b in alnum_chars:
             self.assertEqual(re.escape(b), b)
         elif b == b'\x00':
             self.assertEqual(re.escape(b), b'\\000')
         else:
             self.assertEqual(re.escape(b), b'\\' + b)
         self.assertMatch(re.escape(b), b)
     self.assertMatch(re.escape(p), p)
예제 #4
0
 def test_re_escape(self):
     alnum_chars = string.ascii_letters + string.digits
     p = u''.join(unichr(i) for i in range(256))
     for c in p:
         if c in alnum_chars:
             self.assertEqual(re.escape(c), c)
         elif c == u'\x00':
             self.assertEqual(re.escape(c), u'\\000')
         else:
             self.assertEqual(re.escape(c), u'\\' + c)
         self.assertMatch(re.escape(c), c)
     self.assertMatch(re.escape(p), p)
예제 #5
0
    def test_basic_re_sub(self):
        self.assertEqual(re.sub("(?i)b+", "x", "bbbb BBBB"), 'x x')
        self.assertEqual(re.sub(r'\d+', self.bump_num, '08.2 -2 23x99y'),
                         '9.3 -3 24x100y')
        self.assertEqual(re.sub(r'\d+', self.bump_num, '08.2 -2 23x99y', 3),
                         '9.3 -3 23x99y')

        self.assertEqual(re.sub('.', lambda m: r"\n", 'x'), '\\n')
        self.assertEqual(re.sub('.', r"\n", 'x'), '\n')

        s = r"\1\1"
        self.assertEqual(re.sub('(.)', s, 'x'), 'xx')
        self.assertEqual(re.sub('(.)', re.escape(s), 'x'), s)
        self.assertEqual(re.sub('(.)', lambda m: s, 'x'), s)

        self.assertEqual(re.sub('(?P<a>x)', '\g<a>\g<a>', 'xx'), 'xxxx')
        self.assertEqual(re.sub('(?P<a>x)', '\g<a>\g<1>', 'xx'), 'xxxx')
        self.assertEqual(re.sub('(?P<unk>x)', '\g<unk>\g<unk>', 'xx'), 'xxxx')
        self.assertEqual(re.sub('(?P<unk>x)', '\g<1>\g<1>', 'xx'), 'xxxx')

        self.assertEqual(re.sub('a',r'\t\n\v\r\f\a\b\B\Z\a\A\w\W\s\S\d\D','a'),
                         '\t\n\v\r\f\a\b\\B\\Z\a\\A\\w\\W\\s\\S\\d\\D')
        self.assertEqual(re.sub('a', '\t\n\v\r\f\a', 'a'), '\t\n\v\r\f\a')
        self.assertEqual(re.sub('a', '\t\n\v\r\f\a', 'a'),
                         (chr(9)+chr(10)+chr(11)+chr(13)+chr(12)+chr(7)))

        self.assertEqual(re.sub('^\s*', 'X', 'test'), 'Xtest')
예제 #6
0
 def test_bug_612074(self):
     pat=u"["+re.escape(u"\u2039")+u"]"
     self.assertEqual(re.compile(pat) and 1, 1)