2015-09-16 91 views
-6

我正在尋找一個匹配單詞的正則表達式,其中前兩個字母等於最後兩個字母。一個例子可以闡明這個要求。通過使用正則表達式匹配單詞的Python

給出下面的文字:

渡渡鳥是最結實的鳥類之一。受過教育的白蟻可能會學習如何操作留聲機,但這不太可能。我感覺到包含岩漿的汞合金會開啓爸爸。

我怎樣才能得到這樣的輸出:

answer = [('dodo', 'do'), ('sturdiest', 'st'), ('educated', 'ed'), 
      ('termite', 'te'), ('phonograph', 'ph'), 
      ('sense', 'se'), ('amalgam', 'am'), ('magma', 'ma'), 
      ('enlighten', 'en')] 

正如你可以看到2個初始字符是一樣的最後2

我的想法是,以濾除有任何字長度等於或大於4個字符,並且該單詞的前2個字符與最後兩個字符匹配。

到目前爲止,我接近4個或更多字符的單詞。

[A-Za-z]{4,} 

我不需要一個完整的程序,我只需要正則表達式。

回答

0

使用了由the answer of karthik manchala提供的正則表達式的一個變體,並且注意到,你想的一樣輸出你的問題給出這裏是一個完整的代碼示例:

import re 

inputText = """The dodo was one of the sturdiest birds. 
An educated termite may learn how to operate a phonograph, 
but it's unlikely. I sense that an amalgam that includes 
magma will enlighten Papa.""" 

regex = re.compile(r"((\w{2})\w*\2)") 
answer = regex.findall(inputText) 
print("answer = {}".format(answer)) 

注意,在除了捕獲組兩個第一字符,(\w{2})的,允許字符的任意數量其間,\w*,最後匹配在第一組結尾處,\2,我用另一組括號(...)包圍了整個正則表達式。

當運行這個整個單詞將\1,而這兩個字符組是\2,並使用findall會發現所有出現,並返回元組,其中每個元組是捕獲組的列表。

0

您可以使用下面的正則表達式:

(\w{2})\w*\1 

說明:

  • (\w{2}):匹配任意兩個字母,把他們在捕獲組1 ()
  • \w*:匹配零個或更多字母
  • \1:匹配到底哪個是在括號

的第一組拍攝的那兩個字母見Regex DEMO

+0

渡渡鳥是不在名單上,並感謝 還有我怎麼輸出,如圖 –

+0

@LeeChunHong檢查更新:)和'\ 1'或相同的答案'\ 2'是回參照第1或第二捕獲組 –

+1

解釋downvote plz?這樣我可以改進答案? –

相關問題