繁体   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