不久前,我遇到了一个简单的编程难题,用来确定一个字符串是一个潘格拉姆,还是一个完美的pangram。(尽管值得注意的是,这个特殊的挑战给出了一个不同于标准定义的“完美的pangram”的含义,意思是每一个字母出现n倍于某个肯定的n的句子)。这是个有趣的挑战。但最近,我想知道是否有可能完全用正则表达式来解决这个难题。如果是的话,我预计这将是一个相当糟糕的结果。但我甚至不确定这是可能的。
不过,如果有人能做到的话,那就是Code的人了。所以这是一个挑战:
编写一个正则表达式,该表达式可以确定给定的字符串是否为pangram。你可以假设所有非阿尔法字符已经被删除(或者不,如果你真的想挑战自己的话),并且所有的东西都被转换成小写。
额外的挑战:根据上面给出的定义,编写另一个正则表达式来确定给定的字符串是否是“完美的pangram”。
普通相框的例子:
这只快餐店狗
完美的穿山甲的例子:
abcdefghijklmnopqrstuvwxyz jocknymphswaqfdrugvexblitz
我不太确定单凭regex是否可能做到这一点。如果你发现是的话,荣誉!
发布于 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的标准含义(每个字符精确地检查一次),而不是这里使用的修改版本。
https://codegolf.stackexchange.com/questions/172809
复制相似问题