import re
import sre_compile
import string
+import time
import unittest
import warnings
from re import Scanner
with self.assertRaisesRegex(TypeError, "got 'type'"):
re.search("x*", type)
+ def test_search_anchor_at_beginning(self):
+ s = 'x'*10**7
+ start = time.perf_counter()
+ for p in r'\Ay', r'^y':
+ self.assertIsNone(re.search(p, s))
+ self.assertEqual(re.split(p, s), [s])
+ self.assertEqual(re.findall(p, s), [])
+ self.assertEqual(list(re.finditer(p, s)), [])
+ self.assertEqual(re.sub(p, '', s), s)
+ t = time.perf_counter() - start
+ # Without optimization it takes 1 second on my computer.
+ # With optimization -- 0.0003 seconds.
+ self.assertLess(t, 0.1)
+
def test_possessive_quantifiers(self):
"""Test Possessive Quantifiers
Test quantifiers of the form @+ for some repetition operator @,
state->start = state->ptr = ptr;
status = SRE(match)(state, pattern, 1);
state->must_advance = 0;
+ if (status == 0 && pattern[0] == SRE_OP_AT &&
+ (pattern[1] == SRE_AT_BEGINNING ||
+ pattern[1] == SRE_AT_BEGINNING_STRING))
+ {
+ state->start = state->ptr = ptr = end;
+ return 0;
+ }
while (status == 0 && ptr < end) {
ptr++;
RESET_CAPTURE_GROUP();