[英]regex catastrophic backtracking ; extracting words starts with capital before the specific word
我是Python世界的新手,正則表達式遇到了麻煩。
我正在嘗試在“ sale(s)”(或“ sale(s)”)一詞前提取公司的名稱。
我發現我的文本數據中的公司名稱都以大寫字母開頭(其他部分可以是小寫或大寫字母或數字或“-”或“,例如,“ Abc Def”或“ ABC DEF”或僅是“ ABC”或“ Abc”),
其中一些采用的格式如(“ Abc 和 Def”或“ Abc 和 Def”)。
例如,
從文本中
主要客戶在2005財年,公司持續經營中與Kmart Corporation的直接交易產生了約21%的合並收入(4,782,852美元)。 電腦產品的銷售良好。 但是,計算機零件和顯示分部的銷售一直在下降。
我只想提取“計算機的零件和顯示段”。
所以我試圖創建一個正則表達式
((?:(?:[A-Z]+[a-zA-Z\-0-9\']*\.?\s?(?:and |\& )?)+)+?(?:[S|s]ales?\s))
(1. [AZ] + [a-zA-Z-0-9 \\'] *。?\\ s =>此部分用於查找以大寫字母開頭的單詞,而其他部分則由az或AZ或0-9組成或-或'或。
但是,在https://regex101.com/上,它指出了災難性的回溯,我閱讀了一些相關文章,但仍然找不到解決此問題的方法。
你可以幫幫我嗎?
謝謝!
指出您的模式中的一些事項:
[a-zA-Z\\-0-9\\']
您無需在此處轉義'
。 另外,您只需放置-
在集合的開頭或結尾,就不必對其進行轉義。 \\&
不需要轉義&字符。 [S|s]
說匹配S
, |
|或s
,因此您可能會匹配|ales
。 正確的寫法是[Ss]
。 (?:(?:[A-Z][\w'-]*|and) +)+(?=[sS]ales?)
主要客戶在2005財年,公司持續經營中與Kmart Corporation的直接交易產生了約21%的合並收入(4,782,852美元)。 電腦產品的銷售良好。 但是,計算機零件和顯示分部的銷售一直在下降。
Computer's Parts and Display Segment
(?:(?:[AZ][\\w'-]*|and) +)+
匹配一次或多次
(?:[AZ][\\w'-]*|and)
匹配以下任一
[AZ][\\w'-]*
匹配任何大寫ASCII字符,后跟任意數量的單詞字符,撇號'
或連字符-
and
從字面上匹配 +
匹配一個或多個空格 (?=[sS]ales?)
正前瞻確保任何話的sale
, Sale
, sales
,或Sales
如下
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.