Patch by Chris Herborth (posted to comp.lang.python)to make it behave
with tags that have - or . in their names.
diff --git a/Lib/sgmllib.py b/Lib/sgmllib.py
index d042049..ffb2ccc 100644
--- a/Lib/sgmllib.py
+++ b/Lib/sgmllib.py
@@ -24,8 +24,8 @@
 charref = re.compile('&#([0-9]+)[^0-9]')
 
 starttagopen = re.compile('<[>a-zA-Z]')
-shorttagopen = re.compile('<[a-zA-Z][a-zA-Z0-9]*/')
-shorttag = re.compile('<([a-zA-Z][a-zA-Z0-9]*)/([^/]*)/')
+shorttagopen = re.compile('<[a-zA-Z][-.a-zA-Z0-9]*/')
+shorttag = re.compile('<([a-zA-Z][-.a-zA-Z0-9]*)/([^/]*)/')
 piopen = re.compile('<\?')
 piclose = re.compile('>')
 endtagopen = re.compile('</[<>a-zA-Z]')
@@ -33,7 +33,7 @@
 special = re.compile('<![^<>]*>')
 commentopen = re.compile('<!--')
 commentclose = re.compile('--[%s]*>' % string.whitespace)
-tagfind = re.compile('[a-zA-Z][a-zA-Z0-9]*')
+tagfind = re.compile('[a-zA-Z][-.a-zA-Z0-9]*')
 attrfind = re.compile(
     '[%s]+([a-zA-Z_][-.a-zA-Z_0-9]*)' % string.whitespace
     + ('([%s]*=[%s]*' % (string.whitespace, string.whitespace))