[英]Python matching word by using regex
我正在尋找一個正則表達式,它匹配前兩個字母等於最后兩個字母的單詞。 一個例子可以闡明需求。
鑒於以下文本:
渡渡鳥是最強壯的鳥類之一。 受過教育的白蟻可能會學會如何操作留聲機,但這不太可能。 我覺得包含岩漿的汞合金會啟發爸爸。
我怎樣才能得到這個輸出:
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,}
我不需要完整的程序,我只需要正則表達式。
您可以使用以下正則表達式:
(\w{2})\w*\1
解釋:
(\\w{2})
:匹配任意兩個字母並將它們放入捕獲組 1 ( )
\\w*
: 匹配零個或多個字母\\1
:與第一組括號中捕獲的兩個字母完全匹配見正則表達式演示
使用由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
將查找所有出現並返回元組列表,其中每個元組是捕獲組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.