【发布时间】:2020-02-18 18:06:11
【问题描述】:
在 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 忽略这 2 个字母和后面的其余字母)
目前为止
[cpyrau]*[T][0-9X?][a-oqstv-z]{0,2}([N])?(?(1)(?=[abc]))
这适用于第一个测试用例,但对于所有其他测试用例,如果它是 a 或 c,它包含 N 之前的字母,所以我得到 cT4bc 和 cT3c 用于第二个和第三个测试用例。
感谢任何帮助。
【问题讨论】:
-
这里不是要求锻炼的地方。 stackoverflow.com/help
-
这不是一个练习。我也给出了我在问题中尝试过的解决方案。我只是寻求帮助,为什么它包含字母 c。
-
@Ferie 当然是。 OP 解释了要求并展示了他们的尝试。
-
所以测试用例末尾的 2 也是不允许的,因为根据 (4) 它只能是小写字母,不包括
pryu。您应该展示一些其他更复杂的测试用例及其预期结果。 -
是的。a/b/cN 后面的任何东西也应该被丢弃