【问题标题】:Regex multiple repeating characters with one interjection in Java正则表达式多个重复字符与Java中的一个感叹词
【发布时间】:2014-07-15 08:51:16
【问题描述】:

我正在编写一个正则表达式来检查一个字符是否连续重复 5 次。如果字符重复 6 次,则必须存在第五个和第七个字符之间的允许字符。我可以为一个字符执行此操作,但无法连接多个字符的检查。我应该如何连接?

上面的解释:

YYYY-> 连续 5 次,所以这是真的

YYYYHY -> 6 次重复,允许字符在第 5 次和第 6 次重复之间,也是如此

我当前的正则表达式:

"(.*Y{4}(([LCDH]Y)|Y).*)"  // this works fine in meeting the requirement above

"(.*Y{4}(([LCDH]Y)|Y).*)|(.*T{4}(([DM]T)|T).*)" // this does not work fine

对于第二个表达式,YYYYYYTTTTTQT 的情况,给我假(因为 TTTTTQT 是错误的)但我希望它给我真,因为 YYYYY 是正确的。

TTTTTQT 是错误的,因为在第五个和第六个 T 之间,只能存在 D 或 M。因此,虽然 TTTTT 是正确的,但在这之后和第六个 T 之前存在 Q 就错了。或者,TTTTTDT 或 TTTTTMT 是正确的。

如何确保在连接多个此类条件时,如果其中一个为真,我会得到 True?

【问题讨论】:

  • 如果您一开始检查它是​​否重复 5 次,那么为什么不使用 Y{5} 而不是 {4} 呢?
  • 请把你的要求说的更清楚些,难以理解。为什么TTTTTQT 错了?
  • 试试看,如果你这样做,你会得到一个错误的 YYYYY

标签: java regex


【解决方案1】:

你可以用这个:

^(?:Y{5}(?![^HY]Y)|T{5}(?![^DMT]T))[A-Z]*

说明

  • ^ 锚断言我们位于字符串的开头
  • (?: 启动包含| 交替的非捕获组
  • Y{5} 匹配 5 个 Ys
  • (?![^HY]Y) 断言后面不是一个既不是 H 也不是 Y 的字符,然后是 Y
  • |
  • T{5}匹配5个Ts
  • (?![^DMT]T) 断言这后面不是一个既不是 D 也不是 M 也不是 T 然后是 T 的字符
  • )结束非捕获组
  • [A-Z]* 匹配任何尾随字符

【讨论】:

  • 调整并添加了解释,如果您有任何问题,请告诉我。 :)
  • 酷,我明白了。但是 YYYYYAA 返回 false。如何修改它以接受其他字符?
  • 请查看更新后的答案,如果更接近,请告诉我。 :)
  • 差不多了,除了我们需要在字符串的开头也有 [A-Z]* 因为字符的出现可能发生在任何地方。 ^[A-Z]*(?:Y{5}(?![^HY]Y)|T{5}(?![^DMT]T))[A-Z]*
【解决方案2】:

好的,首先你使用的是正则表达式,所以你不需要在每一边都加上 .*...

所以这个:

(.*Y{4}(([LCDH]Y)|Y).*)|(.*T{4}(([DM]T)|T).*)

变成:

(Y{4}(([LCDH]Y)|Y))|(T{4}(([DM]T)|T))

所有这一切都应该可以很好地在任何东西中找到“YYYYY”......尽管您可以通过将其缩短为:

Y{4}[LCDH]?Y|T{4}[DM]?T

这些 or'ed 表达式中的任何一个都应该与 'YYYYYTTTTTQT' 匹配,所以我只能假设您没有正确使用正则表达式?

【讨论】:

  • 完全是数字。感谢您的简化。但是即使 YYYYY 在 YYYYYTTTTTQT 中,我也会得到一个错误的结果。我正在尝试找出如何实现真实
  • 我不太确定我们应该删除 .*condition.*,它的意思是说之前/之后的任何字符都没有关系。当我删除它时,我得到了一个错误的 YYYYY 返回值。所以我认为应该保留它。
  • 这可能是一个 java 实现问题(.* 的东西)。我已经使用 python 的 re 模块尝试过这个并且对我来说工作得很好,所以我只能假设这是一个 java 问题,而且我对 java regex 问题并不熟悉。对不起。 :(
  • 不用担心,让我思考 .* 的必要性,并更清楚地理解正则表达式
猜你喜欢
  • 2018-06-04
  • 2015-09-17
  • 1970-01-01
  • 1970-01-01
  • 2017-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-03
相关资源
最近更新 更多