2017-09-05 272 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}) 

那 你需要一些方法来决定你的匹配在哪里开始,在这个例子中我已经习惯了