3 回答

TA贡献1847条经验 获得超11个赞
我可能会尝试:
answer = re.sub(r'^.*?(?=\+-)|\*\*\*.*$', '', answer, flags=re.DOTALL)
print(answer)
这打印:
+---------------+
| pcid |
+---------------+
| 22bv03 |
| 3eer3d |
| fes44h2j555j |
| 4mee33ikj5sq1 |
| 99dkk3bvr32a |
| cv44trmq011sa |
| lo33xc1a |
+---------------+
正则表达式使用交替来处理在开头和结尾处修剪答案字符串。第一的:
^.*?(?=\+-)
删除从字符串开头到表格开头(但不包括)的所有内容+-。第二部分:
\*\*\*.*$
删除从脚注 ( ***) 开始到字符串结尾的所有内容。

TA贡献1155条经验 获得超0个赞
看起来您想从第一次出现的固定分隔符到最后一次出现的相同分隔符进行匹配。
在这种情况下,您不必使用正则表达式:
sep = '+---------------+'
start = answer.find(sep)
end = answer.rfind(sep)
print(answer[start:end+len(sep)])
查看Python演示
+---------------+
| pcid |
+---------------+
| 22bv03 |
| 3eer3d |
| fes44h2j555j |
| 4mee33ikj5sq1 |
| 99dkk3bvr32a |
| cv44trmq011sa |
| lo33xc1a |
+---------------+
使用正则表达式,您可以直接匹配从第一次出现到最后一次出现的分隔符:
import re
answer = """
models sold in last 4 weeks
+---------------+
| pcid |
+---------------+
| 22bv03 |
| 3eer3d |
| fes44h2j555j |
| 4mee33ikj5sq1 |
| 99dkk3bvr32a |
| cv44trmq011sa |
| lo33xc1a |
+---------------+***For more information, please visit the company page.
"""
sep = '+---------------+'
m = re.search(r'(?sm)^{0}.*{0}'.format(re.escape(sep)), answer)
if m:
print(m.group())
正则表达式详细信息
(?sm)
- 点现在匹配换行符并^
匹配行首^
- 一行的开始\+---------------\+
- 分隔符模式.*
- 尽可能多的任何 0+ 字符\+---------------\+
- 分隔符模式

TA贡献1856条经验 获得超5个赞
我尝试如下
第 1 步:通过运行以下代码确定索引范围
print(answer.index("ks")) print(answer.index("***"))
一旦找到范围,您将找到表 ie 的索引范围[28:226]
并注释掉此代码。
第2步:
print(answer[28:226])
添加回答
举报