我有一个看起来像下面的字符串

answer = """
models sold in last 4 weeks
+---------------+
|      pcid     |
+---------------+
|     22bv03    |
|     3eer3d    |
|  fes44h2j555j |
| 4mee33ikj5sq1 |
|  99dkk3bvr32a |
| cv44trmq011sa |
|    lo33xc1a   |
+---------------+***For more information, please visit the company page.
"""

现在,我只需要从字符串中提取table,以使最终结果看起来像

+---------------+
|      pcid     |
+---------------+
|     22bv03    |
|     3eer3d    |
|  fes44h2j555j |
| 4mee33ikj5sq1 |
|  99dkk3bvr32a |
| cv44trmq011sa |
|    lo33xc1a   |
+---------------+

现在我尝试做这样的事情

answer.split("***")[0].split("\n")[1]

但是这样做,我只会得到预期的table的header。

如何确保只能从字符串中提取table?这里有没有可以使用的regex

分析解答

我可以尝试:

answer = re.sub(r'^.*?(?=\+-)|\*\*\*.*$', '', answer, flags=re.DOTALL)
print(answer)

打印:

+---------------+
|      pcid     |
+---------------+
|     22bv03    |
|     3eer3d    |
|  fes44h2j555j |
| 4mee33ikj5sq1 |
|  99dkk3bvr32a |
| cv44trmq011sa |
|    lo33xc1a   |
+---------------+

正则表达式使用交替方式来处理在开始和结尾处修剪答案字符串的情况。第一:

^.*?(?=\+-)

从字符串的开头直到表(+-)的开头(但不包括)删除所有内容。第二部分:

\*\*\*.*$

从脚注(***)的开头到字符串的结尾删除所有内容。