【问题标题】:Regex to remove a character if followed by another character in java正则表达式在java中后跟另一个字符时删除一个字符
【发布时间】:2020-02-18 18:06:11
【问题描述】:

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

正则表达式规则:

  1. 单词可以以 - 开头(可选前缀)字母可以是任何这些 'c''p''y''r''a''u'
  2. 后跟大写T
  3. 后跟 0 到 9 之间的数字
  4. 可选后缀)后跟不包含的小写字母 字母 p 或 y 或 r 或 u。可以是一两个字母

问题:如果上述单词的后缀是 a 或 b 或 c 并且后跟大写 N,则正则表达式应忽略该字母及其后面的内容。请查看测试用例以进行澄清。

测试用例

  1. pT1c - 应该返回整个单词 pT1c(因为 N 不跟在 c 后面)
  2. cT4bcN2 - 应该只返回 cT4b(因为 c 后面跟着 N,忽略这两个字母和后面的其余字母)
  3. 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 后面的任何东西也应该被丢弃

标签: java regex


【解决方案1】:

this 做你想做的事吗?

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

【讨论】:

    猜你喜欢
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    相关资源
    最近更新 更多