2017-09-05 64 views
2

我想從文本中提取所有包含「〜帳號(ed或s)以供~~~~~~~ sale」的部分。我正在使用python!python正則表達式百分號

例如,

sentence = "Henry Schenin inc, accounted for approximately 11% of our net sale" 

我的正則表達式是

rx1 = re.compile('(.|\W){1,100}account(.|\W){1,100}for\W(.|\W){1,200}sale(.|\W){1,200}', re.I) 

然而,這

rx1.search(sentence) 

只返回None

,如果我使用普通的EXP ression像

rx2 = re.compile('(.|\W){1,100}account(.|\W){1,100}for\W(.|\W){1,200}', re.I) 

我,

<_sre.SRE_Match object; span=(0, 67), match='Henry Schenin inc, accounted for approximately 11> 

誰能幫我明白爲什麼這個正則表達式無法趕上百分號(%)之後的部分?

((我想提取公司的名稱之前上市的‘佔到了~~發售的’我使用的零件(|。\ W){} 1100在正則表達式的開始

+0

'(。| \ W){1,100}''是一個壞主意,因爲'.'可以匹配什麼'\ W'匹配,你必須使用're.S'或're.DOTALL',並使用'''爲什麼不使用'r'^(。*?)\ s *,\ s *佔\ s + for \ b''然後're.search(pattern,sentence)'?請確認你需要從開始到提取字符串的一部分第一次出現',佔'。 –

+0

@WiktorStribiżew由於我的文本不夠清晰,我更願意使用re.I(在提取這些句子之後,我必須做一些由StanfordTagger檢測的NNP,因此我不想讓文本變得更低)有沒有辦法我可以同時使用re.I和re.S?而且,我的文本比那個例句長,所以我想在「佔到~~~」之前提取公司的名字,這可能是一個或多個。另外,正則表達式結尾處的「銷售」一詞至關重要,因爲如果句子最後沒有包含「銷售」一詞,它可能不是我想要的 – ChanKim

+0

是的,使用2個修飾符就像我回來了re.S'。 –

回答

0
\s+to\s+(.*?account.*? for .*?sale(s){0,1}) 

那 你需要一些方法來決定你的匹配在哪裏開始,在這個例子中我已經習慣了