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])
添加回答
舉報