gpt4 book ai didi

仅相差一个字母的单词的正则表达式

转载 作者:行者123 更新时间:2023-12-01 08:59:42 25 4
gpt4 key购买 nike

我想创建一系列益智游戏,您可以在其中更改单词中的一个字母以创建一个新单词,目的是达到给定的目标单词。例如,将“this”更改为“that”:

this
thin
than
that

我想做的是创建一个正则表达式,它会扫描单词列表并选择所有与当前单词只有一个字母匹配的单词。例如,如果我的起始词是“pale”,而我的单词列表是...

pale
male
sale
tale
pile
pole
pace
page
pane
pave
palm

peal
leap
play
help
pack

...我想选择从“peal”到“pack”的所有单词。这意味着我可以从我的列表中删除它们,只留下可能是下一个匹配项的词。 (“pale”本身不选也可以。)

我可以分几个部分来做:

  • ^.(?!ale).{3}\n选择不像“*ale”的词
  • ^.(?<!p).{3}\n|^.{2}(?!le).{2}\n选择不像“p*le”的词
  • ^.{2}(?<!pa).{2}\n|^.{3}(?!e).\n选择不像“pa*e”的词
  • ^.{3}(?<!pal).\n选择不像“pal*”这样的词。

但是,当我把它们放在一起时......

^.(?!ale).{3}\n|^.(?<!p).{3}\n|^.{2}(?!le).{2}\n|^.{2}(?<!pa).{2}\n|^.{3}(?!e).\n|^.{3}(?<!pal).\n

...除了“苍白”之外的所有内容都匹配。

我需要一些方法来创建 AND不同正则表达式之间的关系,或者(更有可能)完全不同的方法。

最佳答案

您可以使用 Python regex允许模糊匹配的模块:

>>> import regex
>>> regex.findall(r'(?:pale){s<=1}', "male sale tale pile pole pace page pane pave palm peal leap play help pack")
['male', 'sale', 'tale', 'pile', 'pole', 'pace', 'page', 'pane', 'pave', 'palm']

在这种情况下,您希望替换 0 或 1 是匹配项。

或者考虑 TRE library以及支持类似语法的命令行agrep

给定:

$ echo $s 
male sale tale pile pole pace page pane pave palm peal leap play help pack

您可以过滤到单个替换的列表:

$ echo $s | tr ' ' '\n' | agrep '(?:pale){ 1s <2 }'
male
sale
tale
pile
pole
pace
page
pane
pave
palm

关于仅相差一个字母的单词的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33039517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com