2013-03-22 81 views
5

我想查找一個短語,匹配它後面的幾個單詞,但如果我找到另一個特定短語,請儘早停止。正則表達式:匹配一個單詞或最大單詞數

例如,我想匹配「去」的三個詞,但如果遇到「嘗試」,停止匹配過程。因此,例如「去月神公園」將導致「月神公園」; 「前往祕魯首都」將以「首都之城」和「去月球嘗試一些芝士蛋糕」爲結果帶來「月球」。

它可以用一個簡單的正則表達式完成嗎(最好在Python中)?我嘗試過所有我能想到的組合,但失敗慘慘:)。

+2

請告訴我們您的最成功的嘗試。 – NPE 2013-03-22 07:25:33

+0

只爲了這裏的樂趣是一個非正則表達式的解決方案:'''.join(text.split('去'')[1] .split('嘗試')[0] .split()[:3]) ' – jamylak 2013-03-22 08:00:33

回答

5

這一個匹配3({1,3})以下going to the,只要他們不跟去嘗試的話((?!to try)):

import re 
infile = open("input", "r") 
for line in infile: 
    m = re.match("going to the ((?:\w+\s*(?!to try)){1,3})", line) 
    if m: 
     print m.group(1).rstrip() 

輸出

luna park 
capital city of 
moon 
+0

更改爲 – jamylak 2013-03-22 07:48:10

+0

爲什麼它會與「去美麗的大月亮嘗試芝士蛋糕」並返回「美麗的大月亮」?我期待「月亮」不匹配,因爲它後面是「嘗試」... ... – EOL 2013-03-22 07:56:40

+2

@EOL考慮「去月球試試...」:''月亮''後面跟着'嘗試'並且失敗向前看。引擎回退一個空間然後進行比賽。現在下一個字符是空格,並且不匹配'\ w',所以你不會得到第二個單詞。 – 2013-03-22 08:06:04

-2

我認爲你正在尋找一種方法來從句子中提取專有名詞。你應該看看NLTK的正確方法。正則表達式只能用於有限的上下文無關語法。另一方面,你似乎要求分析人類語言的能力,這對於計算機來說是不平凡的。

+1

這不是問題 – jamylak 2013-03-22 07:32:11

+2

如果有什麼,可能更適合作爲評論。 – Dukeling 2013-03-22 07:33:19

相關問題