我正在寻找一个正则表达式,它匹配前两个字母等于最后两个字母的单词。一个例子可以澄清要求。
给出以下文字:
渡渡鸟是最顽固的鸟类之一。受过教育的白蚁可能会学习如何操作留声机,但这不太可能。我觉得包含岩浆的汞合金会启发爸爸。
如何获得此输出:
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 :(得分: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
将查找所有出现并返回元组列表,其中每个元组是捕获组。