首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正则表达式以查找pangram

正则表达式以查找pangram
EN

Code Golf用户
提问于 2018-09-25 21:33:23
回答 1查看 2.3K关注 0票数 1

不久前,我遇到了一个简单的编程难题,用来确定一个字符串是一个潘格拉姆,还是一个完美的pangram。(尽管值得注意的是,这个特殊的挑战给出了一个不同于标准定义的“完美的pangram”的含义,意思是每一个字母出现n倍于某个肯定的n的句子)。这是个有趣的挑战。但最近,我想知道是否有可能完全用正则表达式来解决这个难题。如果是的话,我预计这将是一个相当糟糕的结果。但我甚至不确定这是可能的。

不过,如果有人能做到的话,那就是Code的人了。所以这是一个挑战:

编写一个正则表达式,该表达式可以确定给定的字符串是否为pangram。你可以假设所有非阿尔法字符已经被删除(或者不,如果你真的想挑战自己的话),并且所有的东西都被转换成小写。

额外的挑战:根据上面给出的定义,编写另一个正则表达式来确定给定的字符串是否是“完美的pangram”。

普通相框的例子:

这只快餐店狗

完美的穿山甲的例子:

abcdefghijklmnopqrstuvwxyz jocknymphswaqfdrugvexblitz

我不太确定单凭regex是否可能做到这一点。如果你发现是的话,荣誉!

EN

回答 1

Code Golf用户

发布于 2018-09-25 22:00:07

假设您使用的是包含外观的正则表达式,那么检测一个pangram是很简单的,但是很乏味。使用Python语法:

r"(?=.*a)(?=.*b)(?=.*c)(?=.*d)(?=.*e)(?=.*f)(?=.*g)(?=.*h)(?=.*i)(?=.*j)(?=.*k)(?=.*l)(?=.*m)(?=.*n)(?=.*o)(?=.*p)(?=.*q)(?=.*r)(?=.*s)(?=.*t)(?=.*u)(?=.*v)(?=.*w)(?=.*x)(?=.*y)(?=.*z).*"

https://regex101.com/r/Z7NjEQ/2

(?=.*a)块测试该点之后的内容是否与.*a匹配;另一种说法是,该表达式后面是否有任何字符,然后是a,还是仅仅包括a?然后对字母表中的每一个字母重复检查。

没有了头,它仍然是可能的,但更乏味,因为你必须解释每一个可能的排序字母。如果您仅限于字母abc,下面是它的样子:

r".*(a.*b.*c|a.*c.*b|b.*a.*c|b.*c.*a|c.*a.*b|c.*b.*a).*"

https://regex101.com/r/OnXQe7/1/

这会检查a、任何一组字符、一个b、任何一组字符、然后一个c、或一个a、任何一组字符、一个c、任何一组字符,然后检查b、OR...you。

您可以使用相同的方法来检查完美pangram的标准含义(每个字符精确地检查一次),而不是这里使用的修改版本。

票数 5
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/172809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档