簡體   English   中英

Python 使用正則表達式匹配單詞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM