regex - 我要制作某个正则表达式,但有 1 个测试出了问题

标签 regex

我要做的就是为“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) - 要么 PengGnep字符串
  • $ - 字符串结尾。

关于regex - 我要制作某个正则表达式,但有 1 个测试出了问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64526891/

相关文章:

regex - 使用字符串替换取消注释基于正则表达式的配置行

regex - `?` 在这个 Perl 正则表达式中是什么意思?

ruby - 模式匹配时 =~ 和 match() 有什么区别?

regex - 为什么 `perl -pe ' s/$/\n/g'` 添加 2 个空行?

用于验证数字是否以前导零开头的 Javascript 正则表达式

java - 使用正则表达式在android中将字符串拆分为多个字符串

regex - 什么时候使用解析器生成器,什么时候使用正则表达式就足够了?

python-3.x - 从字符串中提取名称

java - 使用 GNU 读取连续数据时在尝试中调用匹配器函数

c# regex : get all uri's, 但不是来自特定域