这实际上很简单,但我坚持这个解决方案。
我有一个长度为20的随机字符列表只包含大写字符和数字。例如。
NC6DGL2L41ADTXEP20UP
F3KB7UXUBD5089BKANOY
A5P3UI57KW18UNF89AKL
6O36RJHDLNXW8Y1O1GBC
6CVAT6LTAHEKDRCB9KNH
K20L4MQRA5C677P2NNV8
726WYBOO0X7UTFMSN6VT
AYBECMW9AVJX9AX5F1ZZ
HWKWU0BEIWLHZZJYKDC1
TXLF9FYNIVZ7SHR92ZIH
我的目标是只选择那些不包含双重字符的人。
F3KB7UXUBD5089BKANOY
我不想要这样的字符串,因为订单中有 N 字符。
NC6NNNN41ADTXEP20UP
答案 0 :(得分:2)
(?!^.*([A-Z0-9])\1.*$)^[A-Z0-9]+$
请参阅demo
否定前瞻以确保两个相同的角色不会坐在一起
(编辑以提高性能,通过演示链接查看其他版本,正则表达式的v1)。
正则表达式的细分:
(?!
- 开始否定前瞻^
- 从字符串的开头.*
- 任何角色,任何次数([A-Z0-9])
- 捕获给定范围内的字符\1
- 与第一个捕获组相同的字符.*$
任何字符,直到字符串结尾的任何时间)
关闭否定前瞻因此,除此之外,本节的含义不匹配从头到尾包含2个相同字符(在A-Z
和0-9
范围内)的任何内容。
^
- 从字符串的开头[A-Z0-9]+
- 给定范围内的字符,一次或多次$
- 直到最后