diff --git a/Demo/pdist/makechangelog.py b/Demo/pdist/makechangelog.py
index b26f30b..1ffa588 100755
--- a/Demo/pdist/makechangelog.py
+++ b/Demo/pdist/makechangelog.py
@@ -6,7 +6,7 @@
 
 import sys
 import string
-import regex
+import re
 import getopt
 import time
 
@@ -35,9 +35,9 @@
     for rev in allrevs:
         formatrev(rev, prefix)
 
-parsedateprog = regex.compile(
-    '^date: \([0-9]+\)/\([0-9]+\)/\([0-9]+\) ' +
-    '\([0-9]+\):\([0-9]+\):\([0-9]+\);  author: \([^ ;]+\)')
+parsedateprog = re.compile(
+    '^date: ([0-9]+)/([0-9]+)/([0-9]+) ' +
+    '([0-9]+):([0-9]+):([0-9]+);  author: ([^ ;]+)')
 
 authormap = {
     'guido': 'Guido van Rossum  <guido@cnri.reston.va.us>',
@@ -70,7 +70,7 @@
         print
         print
 
-startprog = regex.compile("^Working file: \(.*\)$")
+startprog = re.compile("^Working file: (.*)$")
 
 def getnextfile(f):
     while 1:
diff --git a/Demo/pdist/rcsbump b/Demo/pdist/rcsbump
index e4e9ed5..4fa078e 100755
--- a/Demo/pdist/rcsbump
+++ b/Demo/pdist/rcsbump
@@ -6,12 +6,12 @@
 # Python script for bumping up an RCS major revision number.
 
 import sys
-import regex
+import re
 import rcslib
 import string
 
 WITHLOCK = 1
-majorrev_re = regex.compile('^[0-9]+')
+majorrev_re = re.compile('^[0-9]+')
 
 dir = rcslib.RCS()
 
diff --git a/Demo/pdist/rcslib.py b/Demo/pdist/rcslib.py
index d5f7b65..3e63869 100755
--- a/Demo/pdist/rcslib.py
+++ b/Demo/pdist/rcslib.py
@@ -8,7 +8,7 @@
 
 import fnmatch
 import os
-import regsub
+import re
 import string
 import tempfile
 
@@ -150,7 +150,7 @@
             cmd = 'ci %s%s -t%s %s %s' % \
                   (lockflag, rev, f.name, otherflags, name)
         else:
-            message = regsub.gsub('\([\\"$`]\)', '\\\\\\1', message)
+            message = re.sub(r'([\"$`])', r'\\\1', message)
             cmd = 'ci %s%s -m"%s" %s %s' % \
                   (lockflag, rev, message, otherflags, name)
         return self._system(cmd)
diff --git a/Demo/scripts/eqfix.py b/Demo/scripts/eqfix.py
index 165ca49..35c43aa 100755
--- a/Demo/scripts/eqfix.py
+++ b/Demo/scripts/eqfix.py
@@ -29,7 +29,7 @@
 # into a program for a different change to Python programs...
 
 import sys
-import regex
+import re
 import os
 from stat import *
 import string
@@ -53,7 +53,7 @@
             if fix(arg): bad = 1
     sys.exit(bad)
 
-ispythonprog = regex.compile('^[a-zA-Z0-9_]+\.py$')
+ispythonprog = re.compile('^[a-zA-Z0-9_]+\.py$')
 def ispython(name):
     return ispythonprog.match(name) >= 0
 
@@ -104,7 +104,7 @@
         if lineno == 1 and g is None and line[:2] == '#!':
             # Check for non-Python scripts
             words = string.split(line[2:])
-            if words and regex.search('[pP]ython', words[0]) < 0:
+            if words and re.search('[pP]ython', words[0]) < 0:
                 msg = filename + ': ' + words[0]
                 msg = msg + ' script; not fixed\n'
                 err(msg)
diff --git a/Demo/scripts/ftpstats.py b/Demo/scripts/ftpstats.py
index b37a58d..5c1599e 100755
--- a/Demo/scripts/ftpstats.py
+++ b/Demo/scripts/ftpstats.py
@@ -13,12 +13,12 @@
 
 import os
 import sys
-import regex
+import re
 import string
 import getopt
 
-pat = '^\([a-zA-Z0-9 :]*\)!\(.*\)!\(.*\)!\([<>].*\)!\([0-9]+\)!\([0-9]+\)$'
-prog = regex.compile(pat)
+pat = '^([a-zA-Z0-9 :]*)!(.*)!(.*)!([<>].*)!([0-9]+)!([0-9]+)$'
+prog = re.compile(pat)
 
 def main():
     maxitems = 25
diff --git a/Demo/scripts/mboxconvert.py b/Demo/scripts/mboxconvert.py
index 502d774..8c462f3 100755
--- a/Demo/scripts/mboxconvert.py
+++ b/Demo/scripts/mboxconvert.py
@@ -10,7 +10,7 @@
 import os
 import stat
 import getopt
-import regex
+import re
 
 def main():
     dofile = mmdf
@@ -45,7 +45,7 @@
     if sts:
         sys.exit(sts)
 
-numeric = regex.compile('[1-9][0-9]*')
+numeric = re.compile('[1-9][0-9]*')
 
 def mh(dir):
     sts = 0
diff --git a/Demo/scripts/update.py b/Demo/scripts/update.py
index 32ad6c8..c936026 100755
--- a/Demo/scripts/update.py
+++ b/Demo/scripts/update.py
@@ -8,10 +8,10 @@
 
 import os
 import sys
-import regex
+import re
 
-pat = '^\([^: \t\n]+\):\([1-9][0-9]*\):'
-prog = regex.compile(pat)
+pat = '^([^: \t\n]+):([1-9][0-9]*):'
+prog = re.compile(pat)
 
 class FileObj:
     def __init__(self, filename):
diff --git a/Demo/sockets/mcast.py b/Demo/sockets/mcast.py
index 122dad7..1abd305 100755
--- a/Demo/sockets/mcast.py
+++ b/Demo/sockets/mcast.py
@@ -13,7 +13,6 @@
 import sys
 import time
 import struct
-import regsub
 from socket import *
 
 
diff --git a/Demo/tkinter/guido/ManPage.py b/Demo/tkinter/guido/ManPage.py
index 7d6fe00..de3117b 100755
--- a/Demo/tkinter/guido/ManPage.py
+++ b/Demo/tkinter/guido/ManPage.py
@@ -1,6 +1,6 @@
 # Widget to display a man page
 
-import regex
+import re
 from Tkinter import *
 from Tkinter import _tkinter
 from ScrolledText import ScrolledText
@@ -11,10 +11,10 @@
 
 # XXX Recognizing footers is system dependent
 # (This one works for IRIX 5.2 and Solaris 2.2)
-footerprog = regex.compile(
+footerprog = re.compile(
         '^     Page [1-9][0-9]*[ \t]+\|^.*Last change:.*[1-9][0-9]*\n')
-emptyprog = regex.compile('^[ \t]*\n')
-ulprog = regex.compile('^[ \t]*[Xv!_][Xv!_ \t]*\n')
+emptyprog = re.compile('^[ \t]*\n')
+ulprog = re.compile('^[ \t]*[Xv!_][Xv!_ \t]*\n')
 
 # Basic Man Page class -- does not disable editing
 class EditableManPage(ScrolledText):
diff --git a/Demo/tkinter/guido/mbox.py b/Demo/tkinter/guido/mbox.py
index 9b16f6b..3c36d88 100755
--- a/Demo/tkinter/guido/mbox.py
+++ b/Demo/tkinter/guido/mbox.py
@@ -4,7 +4,7 @@
 
 import os
 import sys
-import regex
+import re
 import getopt
 import string
 import mhlib
@@ -157,7 +157,7 @@
     scanmenu.unpost()
     scanmenu.invoke('active')
 
-scanparser = regex.compile('^ *\([0-9]+\)')
+scanparser = re.compile('^ *([0-9]+)')
 
 def open_folder(e=None):
     global folder, mhf
diff --git a/Demo/tkinter/guido/tkman.py b/Demo/tkinter/guido/tkman.py
index 11d9690..6b0b641 100755
--- a/Demo/tkinter/guido/tkman.py
+++ b/Demo/tkinter/guido/tkman.py
@@ -5,7 +5,7 @@
 import sys
 import os
 import string
-import regex
+import re
 from Tkinter import *
 from ManPage import ManPage
 
@@ -208,15 +208,15 @@
             print 'Empty search string'
             return
         if not self.casevar.get():
-            map = regex.casefold
+            map = re.IGNORECASE
         else:
             map = None
         try:
             if map:
-                prog = regex.compile(search, map)
+                prog = re.compile(search, map)
             else:
-                prog = regex.compile(search)
-        except regex.error, msg:
+                prog = re.compile(search)
+        except re.error, msg:
             self.frame.bell()
             print 'Regex error:', msg
             return
