Python?獲取指定開(kāi)頭指定結(jié)尾所夾中間內(nèi)容(推薦)
cv的xdm可以直接翻到 需求 和 代碼 用,想看中間的分析就老實(shí)往下看吧
little 背景
最近在做畢設(shè),需要將幾百篇整體結(jié)構(gòu)差不多的文章中提取出一些內(nèi)容,所以才有了這個(gè)blog。
需求
獲取文章中指定開(kāi)頭、指定結(jié)尾中所夾的內(nèi)容。其中,開(kāi)頭和結(jié)尾均有多種,但最多也就十幾種,所以代碼還是具有可行性的。
例:
X X 市 人 民 檢 察 院 指 控 : ‾ \underline{XX市人民檢察院指控:} XX市人民檢察院指控:?被告人XXX與被害人YYY(女,歿年41歲,系XXX妻子)因家庭矛盾多次發(fā)生爭(zhēng)執(zhí)。X年Y月Z日早晨,被告人XXX在X市X市場(chǎng)…被告人XXX為偏執(zhí)性精神障礙,具有限制刑事責(zé)任能力。
公 訴 機(jī) 關(guān) 認(rèn) 為 ‾ \underline{公訴機(jī)關(guān)認(rèn)為} 公訴機(jī)關(guān)認(rèn)為?,被告人XXX故意非法剝奪他人生命,致一人死亡,其行為應(yīng)以故意殺人罪追究刑事責(zé)任
所需內(nèi)容為:第一個(gè)下劃線到第二個(gè)下劃線中間的內(nèi)容,即“被告人XXX…責(zé)任能力。”。其中,“檢察院指控”是指定開(kāi)頭,“公訴機(jī)關(guān)認(rèn)為”是指定結(jié)尾。
解決方案
原本想著NLP有沒(méi)有現(xiàn)成的庫(kù)可以直接調(diào)包,后來(lái)搜了半天沒(méi)搜到,然后看到了正則表達(dá)式(真香)。
代碼
低配方法:
適用于只有一種固定開(kāi)頭和結(jié)尾,多種就不行了
import re
def GetMiddleStr(content,startStr,endStr):
# patternStr = r'.*%s(.+?)%s.*'%(startStr,endStr) # 此模式不能跨段,‘.'只能匹配除了'\n'外所有單個(gè)字符
patternStr = r'[\s\S]*%s(.+?)%s[\s\S]*'%(startStr,endStr)
# patternStr = re.compile(patternStr,re.IGNORECASE) # 忽略大小寫 ,這個(gè)適用于英文文章
middleStr= re.match(patternStr,content)
if middleStr:
return middleStr.group(1)中配方法:
適用于多種固定開(kāi)頭和結(jié)尾,不過(guò)是蠻力法,可以優(yōu)化判斷,減少循環(huán)次數(shù)
import re
def GetMiddleStr2(content,startStr,endStr):
# patternStr = r'.*%s(.+?)%s.*'%(startStr,endStr)
goalStr = str('')
for sStr in startStr:
for eStr in endStr:
patternStr = r'[\s\S]*%s(.+?)%s[\s\S]*'%(sStr,eStr)
middleStr= re.match(patternStr,content)
if middleStr:
if not goalStr: # 判斷 空 時(shí)候的值
goalStr = middleStr.group(1)
else: # 非空時(shí),將將短的留下來(lái)
goalStr = middleStr.group(1) if len(goalStr)>len(middleStr.group(1)) else goalStr
return goalStr運(yùn)行效果
content='且得到被害人家屬諒解。綜上,建議法庭對(duì)被告人XXX減輕處罰。經(jīng)審理查明:被告人XXX與被害人YYY因家庭矛盾多次發(fā)生爭(zhēng)執(zhí)。X年Y月Z日清晨,被告人XXX在X市X市場(chǎng)......被告人XXX為偏執(zhí)性精神障礙,具有限制刑事責(zé)任能力。公訴機(jī)關(guān)認(rèn)為,被告人XXX故意非法剝奪他人生命,致一人死亡,其行為應(yīng)以故意殺人罪追究刑事責(zé)任'
startStr = '經(jīng)審理查明:'
endStr = '公訴機(jī)關(guān)認(rèn)為,'
print(GetMiddleStr(content,startStr,endStr))

第二種運(yùn)行時(shí)將startStr和endStr分別賦值為:[‘AAA’,‘BBB’,…],即可
例如:
startStr = [‘審理查明:’,‘審理查明:’,‘檢察院指控’]
endStr = [‘經(jīng)鑒定’,‘經(jīng)鑒定,’, ‘歸案后’]
代碼講解
正則表達(dá)式查一下手冊(cè)即可:
.*:除了’\n’以外所有字符重復(fù)多次
[\s\S]:空白字符或者非空白字符,即所有字符(一個(gè)集合∪它在全集中的補(bǔ)集,即全集)
其余查一下手冊(cè)就ok
正則表達(dá)式手冊(cè)
到此這篇關(guān)于Python 獲取指定開(kāi)頭指定結(jié)尾所夾中間內(nèi)容的文章就介紹到這了,更多相關(guān)Python 獲取指定開(kāi)頭指定結(jié)尾中間內(nèi)容內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
flask框架自定義過(guò)濾器示例【markdown文件讀取和展示功能】
這篇文章主要介紹了flask框架自定義過(guò)濾器,結(jié)合實(shí)例形式分析了flask基于自定義過(guò)濾器實(shí)現(xiàn)markdown文件讀取和展示功能相關(guān)操作技巧,需要的朋友可以參考下2019-11-11
Python+Matplotlib繪制帶有對(duì)角線的散點(diǎn)圖的示例代碼
Matplotlib 是一個(gè)用于繪制二維圖形的 Python 庫(kù),這篇文章主要介紹了Python如何利用Matplotlib繪制帶有對(duì)角線的散點(diǎn)圖,需要的小伙伴可以參考一下2023-06-06
Python實(shí)現(xiàn)將PowerPoint轉(zhuǎn)為HTML格式
有時(shí)我們需要將精心設(shè)計(jì)的PPT發(fā)布到網(wǎng)絡(luò)上以便于更廣泛的訪問(wèn)和分享,本文將介紹如何使用Python將PowerPoint轉(zhuǎn)換為HTML格式,需要的可以參考下2024-04-04
python中如何使用xml.dom.minidom模塊讀取解析xml文件
xml.dom.minidom模塊應(yīng)該是內(nèi)置模塊不用下載安裝,本文給大家介紹python中如何使用xml.dom.minidom模塊讀取解析xml文件,感興趣的朋友一起看看吧2023-10-10
python開(kāi)發(fā)環(huán)境PyScripter中文亂碼問(wèn)題解決方案
PyScripter是一個(gè)使用Delphi開(kāi)發(fā)的開(kāi)源的Python集成開(kāi)發(fā)環(huán)境(IDE),PyScripter支持Python2.4、2.5、2.6、2.7、3.0、3.1、3.2,而且可以根據(jù)需要切換。2016-09-09
pycharm開(kāi)發(fā)一個(gè)簡(jiǎn)單界面和通用mvc模板(操作方法圖解)
這篇文章主要介紹了pycharm開(kāi)發(fā)最簡(jiǎn)單的界面和通用mvc模板的方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05

