Если любой тег, то вот так:
r'<(\w+)([\s\S]+?)<\/\1>'
При этом вернётся два значения, тег и его содержимое:
>>> tables = re.findall(r'<(\w+)([\s\S]+?)<\/\1>', s)
>>> tables
[('table', ' id=1>\n <tr>\n <td>Some Text</td>\n </tr>\n'), ('table', ' id=2>\n <tr>\n <td>Some Text</td>\n </tr>\n')]
Если нужно вытаскивать только тег table (или других точно не будет), тогда вот так:
r'<table([\s\S]+?)<\/table>'
Пример:
>>> tables = re.findall(r'<table([\s\S]+?)<\/table>', s)
>>> tables
[' id=1>\n <tr>\n <td>Some Text</td>\n </tr>\n', ' id=2>\n <tr>\n <td>Some Text</td>\n </tr>\n']