2012-03-06 70 views
2

我試圖讓一個python程序返回具有雙連續字母的單詞(例如,門,球,地板)。我的代碼到現在爲止是這樣的下面,但它返回我的兩個字母的部分劃分的文件中的所有單詞:雙連續字母返回單詞

def text_processing(file_location): 
    import re 
    file_variable = open(file_location) 
    lines = file_variable.read() 
    print lines 

    double_letter = re.compile('[A-Z]{2,2}', re.IGNORECASE) 
    double_letter_list = double_letter.findall(lines) 

    print double_letter_list 
+0

你可以用'{2}'而不是'{2,2}'(雖然這不能解決問題)。 – 2012-03-07 00:03:04

回答

1

你可以試試這個:

def text_processing(file_location): 
    import re 
    file_variable = open(file_location) 
    lines = file_variable.readlines() 

    double_letter = re.compile(r'.*(.)\1.*', re.IGNORECASE) 
    double_letter_list = [] 

    for line in lines: 
     for word in line.split(" "): 
      match = double_letter.match(word) 
      if match: 
       double_letter_list.append(match.group()) 

    print double_letter_list 

它會嘗試將匹配模式與文件中的每個單詞相匹配,如果它匹配,則將其附加到雙字列表中。

+0

太棒了,這個效果很好。謝謝 – italianfoot 2012-03-07 04:12:44

0

我認爲你必須在正則表達式的問題,嘗試像r'(.)\1',而不是一個模式(這將匹配第一個括號中的任何字符,然後重複相同的字符)。

你也應該照顧到關閉文件句柄,這意味着讀與上下文管理器這樣的臺詞:

with open(file_location) as f: 
    lines = f.read() 

>>> with open('/usr/share/dict/words') as f: 
... lines = [l.strip() for l in f.readlines()] 
... 
>>> import re 
>>> for line in lines: 
... if re.findall(r'([a-z])\1', line.lower()): 
...  print line 
... 
Aachen 
Aachen's 
Aaliyah 
Aaliyah's 
Aaron 
Aaron's 
Abbas 
Abbasid 
Abbasid's 
Abbott 
Abbott's 
Abby 
Abby's 
Aberdeen 
Aberdeen's 
Abyssinia 
Abyssinia's 
Abyssinian 
Accra 
Accra's 
Achilles 
Acuff 
... 
6

試試這個正則表達式:r"\w*(\w)\1\w*"

2
re.findall('(\w*(\w)\\2\w*)', file_variable.read()) 

將返回記錄列表(文字,重複字母),那麼你可以把所有的第一要素。

例子:

>>> re.findall('(\w*(\w)\\2\w*)', 'some words here: boo, shoo, wooooo, etc.') 
[('boo', 'o'), ('shoo', 'o'), ('wooooo', 'o')] 
+0

(。)應該是(\ w),或者這也會捕獲由兩個相同字符(如空格)分隔的兩個單詞。 – user1096188 2012-03-07 00:31:07

+0

是的,編輯 - 修復它。 – 2012-03-07 00:31:46