亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從 Python 中的多行字符串中提取某些子字符串?

如何從 Python 中的多行字符串中提取某些子字符串?

哈士奇WWW 2022-06-28 10:15:43
我有一個如下所示的字符串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。如何確保我只能table從字符串中提取?有什么regex可以在這里應用的嗎?
查看完整描述

3 回答

?
回首憶惘然

TA貢獻1847條經驗 獲得超11個贊

我可能會嘗試:


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

print(answer)

這打印:


+---------------+

|      pcid     |

+---------------+

|     22bv03    |

|     3eer3d    |

|  fes44h2j555j |

| 4mee33ikj5sq1 |

|  99dkk3bvr32a |

| cv44trmq011sa |

|    lo33xc1a   |

+---------------+

正則表達式使用交替來處理在開頭和結尾處修剪答案字符串。第一的:


^.*?(?=\+-)

刪除從字符串開頭到表格開頭(但不包括)的所有內容+-。第二部分:


\*\*\*.*$

刪除從腳注 ( ***) 開始到字符串結尾的所有內容。


查看完整回答
反對 回復 2022-06-28
?
白衣非少年

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+ 字符

  • \+---------------\+- 分隔符模式


查看完整回答
反對 回復 2022-06-28
?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

我嘗試如下

第 1 步:通過運行以下代碼確定索引范圍

print(answer.index("ks")) 
print(answer.index("***"))

一旦找到范圍,您將找到表 ie 的索引范圍[28:226]并注釋掉此代碼。

第2步:

print(answer[28:226])


查看完整回答
反對 回復 2022-06-28
  • 3 回答
  • 0 關注
  • 236 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號