正则表达式在java中删除后跟另一个字符的字符

正则表达式在java中删除后跟另一个字符的字符,java,regex,Java,Regex,使用java中的正则表达式查找符合以下规则的单词 正则表达式规则: 单词可以以-(可选前缀)开头,字母可以是这些“c”“p”“y”“r”“a”“u”中的任意一个 然后是大写字母T 后跟0到9之间的数字 (可选后缀),后跟不包含的小写字母 字母p或y或r或u。可以是一个或两个字母 问题:如果上面提到的单词后缀是a、b或c,后跟大写字母N,则正则表达式应该忽略该字母及其后面的内容。查看测试用例以获得澄清 测试用例 pT1c-应返回整个单词pT1c(因为N不跟在c后面) cT4bcN2-应该只返回cT

使用java中的正则表达式查找符合以下规则的单词

正则表达式规则:

  • 单词可以以-(可选前缀)开头,字母可以是这些“c”“p”“y”“r”“a”“u”中的任意一个
  • 然后是大写字母T
  • 后跟0到9之间的数字
  • 可选后缀),后跟不包含的小写字母 字母p或y或r或u。可以是一个或两个字母
  • 问题:如果上面提到的单词后缀是a、b或c,后跟大写字母N,则正则表达式应该忽略该字母及其后面的内容。查看测试用例以获得澄清

    测试用例

  • pT1c-应返回整个单词pT1c(因为N不跟在c后面)
  • cT4bcN2-应该只返回cT4b(因为c后面跟着N,忽略这两个字母以及它们后面的其他字母)
  • cT3cN2-应返回cT3(因为c后面跟N忽略这两个字母以及后面的其余字母)
  • 到目前为止我有

    [cpyrau]*[T][0-9X?][a-oqstv-z]{0,2}([N])?(?(1)(?=[abc]))

    它适用于第一个测试用例,但对于所有其他测试用例,它包括N之前的字母,如果它是a或c,那么我得到第二个和第三个测试用例的cT4bc和cT3c

    感谢您的帮助。

    您想做什么

    \b[cpyrau]*T\d(?:(?![a-c]N)[a-oqstv-z]){0,2}
    

    这不是一个要求锻炼的地方。这不是一个练习。我也给出了我在问题中尝试过的解决方案。我只是想寻求帮助,为什么它包含字母c。@Ferie当然是。OP解释了要求并展示了他们的尝试。因此,测试用例末尾的2也不允许,因为根据(4),它只能是小写字母,不包括
    pryu
    。您应该显示一些其他更复杂的测试用例及其预期结果。是的。a/b/cN之后的任何内容也应该被丢弃