]> granicus.if.org Git - python/commitdiff
(experimental) "finditer" method/function. this works pretty much
authorFredrik Lundh <fredrik@pythonware.com>
Wed, 24 Oct 2001 22:16:30 +0000 (22:16 +0000)
committerFredrik Lundh <fredrik@pythonware.com>
Wed, 24 Oct 2001 22:16:30 +0000 (22:16 +0000)
like findall, but returns an iterator (which returns match objects)
instead of a list of strings/tuples.

Lib/sre.py
Modules/_sre.c

index e7517f598fcf5b681e30cae8d71561eb056cc1ef..88b4fabaaf31fd7712a134d29d8a2a4742b351d7 100644 (file)
@@ -93,6 +93,7 @@ This module also defines an exception 'error'.
 
 """
 
+import sys
 import sre_compile
 import sre_parse
 
@@ -164,6 +165,15 @@ def findall(pattern, string):
     Empty matches are included in the result."""
     return _compile(pattern, 0).findall(string)
 
+if sys.hexversion >= 0x02020000:
+    def finditer(pattern, string):
+        """Return an iterator over all non-overlapping matches in
+        the string.  For each match, the iterator returns a match
+        object.
+
+        Empty matches are included in the result."""
+        return _compile(pattern, 0).finditer(string)
+
 def compile(pattern, flags=0):
     "Compile a regular expression pattern, returning a pattern object."
     return _compile(pattern, flags)
index c520b604f40df0c803f278097923abce22f51f6a..c78ed52c421c14bd965776c4b0da7c40577187e1 100644 (file)
@@ -35,6 +35,7 @@
  * 2001-10-20 fl  added split primitive; reenable unicode for 1.6/2.0/2.1
  * 2001-10-21 fl  added sub/subn primitive
  * 2001-10-22 fl  check for literal sub/subn templates
+ * 2001-10-24 fl  added finditer primitive (for 2.2 only)
  *
  * Copyright (c) 1997-2001 by Secret Labs AB.  All rights reserved.
  *
@@ -1954,6 +1955,30 @@ error:
     
 }
 
+#if PY_VERSION_HEX >= 0x02020000
+static PyObject*
+pattern_finditer(PatternObject* pattern, PyObject* args)
+{
+    PyObject* scanner;
+    PyObject* search;
+    PyObject* iterator;
+
+    scanner = pattern_scanner(pattern, args);
+    if (!scanner)
+        return NULL;
+
+    search = PyObject_GetAttrString(scanner, "search");
+    Py_DECREF(scanner);
+    if (!search)
+        return NULL;
+
+    iterator = PyCallIter_New(search, Py_None);
+    Py_DECREF(search);
+
+    return iterator;
+}
+#endif
+
 static PyObject*
 pattern_split(PatternObject* self, PyObject* args, PyObject* kw)
 {
@@ -2331,6 +2356,9 @@ static PyMethodDef pattern_methods[] = {
     {"subn", (PyCFunction) pattern_subn, METH_VARARGS|METH_KEYWORDS},
     {"split", (PyCFunction) pattern_split, METH_VARARGS|METH_KEYWORDS},
     {"findall", (PyCFunction) pattern_findall, METH_VARARGS|METH_KEYWORDS},
+#if PY_VERSION_HEX >= 0x02020000
+    {"finditer", (PyCFunction) pattern_finditer, METH_VARARGS},
+#endif
     {"scanner", (PyCFunction) pattern_scanner, METH_VARARGS},
     {"__copy__", (PyCFunction) pattern_copy, METH_VARARGS},
     {"__deepcopy__", (PyCFunction) pattern_deepcopy, METH_VARARGS},