python re findall 的問題帖子來看看幫忙解答

文本

2014年以來,我國啤酒行業年產量就進入了下滑通道,2019年全國規模以上啤酒企業累計銷量3765.3萬千噸生,較2018年的3812.2萬千升下降1.23%(數據來源:國家統計局),但降。12736iuq34yi3g

正則

1:    .*(生產|產量|銷量).*[升噸].*
2:    .*((生產)|(產量)|(銷量)).*[升噸].*

很奇怪,我想要取出來句子中,前半部分帶有“生產”或者“產量”或者“銷量”後半部分有“噸”或者“升”的串。文本就是前面的文本。

  1. 第一個正則
    pattern=re.compile(".*(生產|產量|銷量).*[升噸].*")
    pattern.findall(text)
    
    但是findall卻給我取出來這個結果,單單兩個字,我人都懵了啦。我後面不是寫了[升噸]了嗎,怎麼給我整沒了?
    ['銷量']
    
  2. 第二個正則
    pattern=re.compile(".*((生產)|(產量)|(銷量)).*[升噸].*")
    pattern.findall(text)
    
    這結果更離譜……我怕不是學了個假的正則表達……
    [('銷量', '', '', '銷量')]
    

findall之外的函數

當然除了findall,還有match和search(iter那個不討論了)。
直接match,是可以match到的。

pattern=re.compile(".*(生產|產量|銷量).*[升噸].*")
pattern.match(text).group()
'2014年以來,我國啤酒行業年產量就進入了下滑通道,2019年全國規模以上啤酒企業累計銷量3765.3萬千噸生,較2018年的3812.2萬千升下降1.23%(數據來源:國家統計局),但降。12736iuq34yi3g'

直接search,也是可以search到的。

pattern.search(text).group()
'2014年以來,我國啤酒行業年產量就進入了下滑通道,2019年全國規模以上啤酒企業累計銷量3765.3萬千噸生,較2018年的3812.2萬千升下降1.23%(數據來源:國家統計局),但降。12736iuq34yi3g'

但侷限就在於,他們只能匹配一個。而我是 我全都要啊。
有個辦法,就是按句號分割每段話,出來句子列表然後按句匹配。但是看上去挺麻煩,

有沒辦法直接正則呢?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章