Python使用正则表达式匹配单词

时间:2015-09-16 16:27:03

标签: python 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,}

我不需要一个完整的程序,我只需要正则表达式。

2 个答案:

答案 0 :(得分:0)

您可以使用以下正则表达式:

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

<强>解释

  • (\w{2}):匹配任意两个字母并将其放入捕获组1 ( )
  • \w*:匹配零个或多个字母
  • \1:恰好匹配在第一组括号中捕获的那两个字母

请参阅Regex DEMO

答案 1 :(得分: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将查找所有出现并返回元组列表,其中每个元组是捕获组。