我在寻找一种特殊的回文。规则是
- 长度为5
- 在前两个字符中,一个应该是大写字母,另一个应该是数字
- 第三个字符是小写字母。在
对我来说,主要的困难是团体推荐人的位置不确定。
如果我写'(((([A-Z])([0-9]))|(([0-9])([A-Z])))[a-z]\5\4)'
,那么只有K2i2K
而不是{}匹配。为了匹配2KiK2
,我必须写'(((([A-Z])([0-9]))|(([0-9])([A-Z])))[a-z]\8\7)'
。在
那么我应该如何编写正则表达式呢?谢谢您。在
Tags:
我想说的是,让你的生活变得简单,在两个场景中使用一个简单的交替:
Demo
这将查找},
A-Z
,0-9
,a-z
,0-9
,A-Z
或{A-Z
,a-z
,A-Z
,0-9
。虽然您可能认为它会影响性能,但实际上不应该。它要么匹配A-Z
,然后尝试走第一条路由(如果在任何一点失败,它将尝试匹配0-9
,并在一个额外的步骤中失败),或者在A-Z
失败,并尝试从0-9
开始匹配。不管怎样,它实际上在成功/失败上只有一步之遥。在它断言(带有正面的外观)有5个字符,并且前两个字符要么是大写数字,要么是数字大写对。在
一旦我们确定了这一点,剩下的就无关紧要了。我们捕获前两个字符,检查一个小写字母,然后以相反的顺序匹配前两个捕获。在
我还用单词边界(
\b
)包围正则表达式,以确保它在单词中间不匹配。在请参阅Regex101上的详细说明。在
相关问题 更多 >
编程相关推荐