排除字符串中的双字符

时间:2018-02-07 16:31:08

标签: regex

这实际上很简单,但我坚持这个解决方案。

我有一个长度为20的随机字符列表只包含大写字符数字。例如。

NC6DGL2L41ADTXEP20UP
F3KB7UXUBD5089BKANOY
A5P3UI57KW18UNF89AKL
6O36RJHDLNXW8Y1O1GBC
6CVAT6LTAHEKDRCB9KNH
K20L4MQRA5C677P2NNV8
726WYBOO0X7UTFMSN6VT
AYBECMW9AVJX9AX5F1ZZ
HWKWU0BEIWLHZZJYKDC1
TXLF9FYNIVZ7SHR92ZIH

我的目标是只选择那些不包含双重字符的人。

F3KB7UXUBD5089BKANOY

我不想要这样的字符串,因为订单中有 N 字符。

NC6NNNN41ADTXEP20UP

1 个答案:

答案 0 :(得分:2)

(?!^.*([A-Z0-9])\1.*$)^[A-Z0-9]+$

请参阅demo

否定前瞻以确保两个相同的角色不会坐在一起

(编辑以提高性能,通过演示链接查看其他版本,正则表达式的v1)。

正则表达式的细分:

  • (?! - 开始否定前瞻
  • ^ - 从字符串的开头
  • .* - 任何角色,任何次数
  • ([A-Z0-9]) - 捕获给定范围内的字符
  • \1 - 与第一个捕获组相同的字符
  • .*$任何字符,直到字符串结尾的任何时间
  • )关闭否定前瞻

因此,除此之外,本节的含义不匹配从头到尾包含2个相同字符(在A-Z0-9范围内)的任何内容。

  • ^ - 从字符串的开头
  • [A-Z0-9]+ - 给定范围内的字符,一次或多次
  • $ - 直到最后