Python?獲取指定開頭指定結(jié)尾所夾中間內(nèi)容(推薦)
cv的xdm可以直接翻到 需求 和 代碼 用,想看中間的分析就老實(shí)往下看吧
little 背景
最近在做畢設(shè),需要將幾百篇整體結(jié)構(gòu)差不多的文章中提取出一些內(nèi)容,所以才有了這個(gè)blog。
需求
獲取文章中指定開頭、指定結(jié)尾中所夾的內(nèi)容。其中,開頭和結(jié)尾均有多種,但最多也就十幾種,所以代碼還是具有可行性的。
例:
X X 市 人 民 檢 察 院 指 控 : ‾ \underline{XX市人民檢察院指控:} XX市人民檢察院指控:?被告人XXX與被害人YYY(女,歿年41歲,系XXX妻子)因家庭矛盾多次發(fā)生爭執(zhí)。X年Y月Z日早晨,被告人XXX在X市X市場…被告人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é)任能力。”。其中,“檢察院指控”是指定開頭,“公訴機(jī)關(guān)認(rèn)為”是指定結(jié)尾。
解決方案
原本想著NLP有沒有現(xiàn)成的庫可以直接調(diào)包,后來搜了半天沒搜到,然后看到了正則表達(dá)式(真香)。
代碼
低配方法:
適用于只有一種固定開頭和結(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)
中配方法:
適用于多種固定開頭和結(jié)尾,不過是蠻力法,可以優(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í),將將短的留下來 goalStr = middleStr.group(1) if len(goalStr)>len(middleStr.group(1)) else goalStr return goalStr
運(yùn)行效果
content='且得到被害人家屬諒解。綜上,建議法庭對被告人XXX減輕處罰。經(jīng)審理查明:被告人XXX與被害人YYY因家庭矛盾多次發(fā)生爭執(zhí)。X年Y月Z日清晨,被告人XXX在X市X市場......被告人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á)式查一下手冊即可:
.*:除了’\n’以外所有字符重復(fù)多次
[\s\S]:空白字符或者非空白字符,即所有字符(一個(gè)集合∪它在全集中的補(bǔ)集,即全集)
其余查一下手冊就ok
正則表達(dá)式手冊
到此這篇關(guān)于Python 獲取指定開頭指定結(jié)尾所夾中間內(nèi)容的文章就介紹到這了,更多相關(guān)Python 獲取指定開頭指定結(jié)尾中間內(nèi)容內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python 比較兩個(gè)數(shù)組的元素的異同方法
下面小編就為大家?guī)硪黄狿ython 比較兩個(gè)數(shù)組的元素的異同方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08Python自動(dòng)化導(dǎo)出zabbix數(shù)據(jù)并發(fā)郵件腳本
這篇文章主要介紹了Python自動(dòng)化導(dǎo)出zabbix數(shù)據(jù)并發(fā)郵件腳本,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08python 用opencv實(shí)現(xiàn)霍夫線變換
這篇文章主要介紹了python 如何用opencv實(shí)現(xiàn)霍夫線變換,幫助大家更好的理解和使用python處理圖片,感興趣的朋友可以了解下2020-11-11淺談Scrapy網(wǎng)絡(luò)爬蟲框架的工作原理和數(shù)據(jù)采集
在python爬蟲中:requests + selenium 可以解決目前90%的爬蟲需求,難道scrapy 是解決剩下的10%的嗎?顯然不是。scrapy框架是為了讓我們的爬蟲更強(qiáng)大、更高效。接下來我們一起學(xué)習(xí)一下它吧。2019-02-02