re-pcre: Implement subset of sub().

asyncio-segfault
Paul Sokolovsky 2014-04-11 06:01:49 +03:00
rodzic a943b0f2e8
commit 72b5eedd3d
1 zmienionych plików z 21 dodań i 0 usunięć

Wyświetl plik

@ -38,6 +38,9 @@ class PCREMatch:
def group(self, n):
return self.s[self.offsets[n*2]:self.offsets[n*2+1]]
def span(self, n=0):
return self.offsets[n*2], self.offsets[n*2+1]
class PCREPattern:
@ -58,6 +61,19 @@ class PCREPattern:
def match(self, s):
return self.search(s, PCRE_ANCHORED)
def sub(self, repl, s):
assert "\\" not in repl, "Backrefs not implemented"
res = ""
while s:
m = self.search(s)
if not m:
return res + s
beg, end = m.span()
res += s[:beg]
assert not callable(repl)
res += repl
s = s[end:]
def compile(pattern, flags=0):
errptr = bytes(4)
@ -70,3 +86,8 @@ def compile(pattern, flags=0):
def search(pattern, string, flags=0):
r = compile(pattern, flags)
return r.search(string)
def sub(pattern, repl, s, count=0, flags=0):
r = compile(pattern, flags)
return r.sub(repl, s)