我要做的就是为“penguins”制作一个正则表达式
规则如下:
- 如果企鹅向右看,则用“Peng”一词表示;如果向左看,则用“Gnep”表示。
- 每行中仅出现企鹅(例如,没有北极熊)。
如果一只企鹅被下一只企鹅隐藏,则其单词的后缀将被删除。
示例:
-
Pen
描述了一只看起来正确、部分隐藏的企鹅。 -
Gn
描述了一只被严重隐藏的左看企鹅。
我们只对至少三分之一可见的企鹅感兴趣。所有其他人都被忽略。这意味着剩余部分必须至少包含两个字符。
一排企鹅是通过将单词连接起来而写成的。两只企鹅排成一行的示例:
-
PengPeng
- 两只企鹅都完全可见。 -
GnePeng
- 右边的企鹅 (Peng) 隐藏了左边的企鹅 (Gne
)。
最右边的企鹅是行中的最后一个,因此完全可见。
每行至少包含一只企鹅。
我写的表达式是:
((P|G)(([eng]|[nep]){1,4}))*((Peng|Gnep)+)
我测试了测试词:
Peng works
Gnep works
Pen doesnt
PengPeng works
PenGnep works
PPeng works - shouldnt
Pooh doesnt
PengPe works - shouldnt
我需要改变什么?通过 Regexr.com 完成测试
最佳答案
你可以使用
^(?:Pe(?:ng?)?|Gn(?:ep?)?)*(?:Peng|Gnep)$
请参阅regex demo
详细信息
-
^
- 字符串开头 -
(?:Pe(?:ng?)?|Gn(?:ep?)?)*
- 零次或多次出现-
Pe(?:ng?)?
-Pe
后跟可选的n
随后是可选的g
-
|
- 或 -
Gn(?:ep?)?
-Gn
后跟可选的e
随后是可选的p
-
-
(?:Peng|Gnep)
- 要么Peng
或Gnep
字符串 -
$
- 字符串结尾。
关于regex - 我要制作某个正则表达式,但有 1 个测试出了问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64526891/