我需要帮助:
\d{1,5}(-| )\d{1,5}
这是我正在做的
^([C][A|F|G|J|K|L])( |)(\d{1,6}|\d{1,5}(-| )\d{1,5})$
([C][A|F|G|J|K|L])
匹配前2个字符。( |)
匹配可选空格。\d{1,6}
匹配1-6位数字,不带任何破折号或空格。\d{1,5}(-| )\d{1,5}
应该匹配一个2-6位数,其中包括1个破折号或1个空格。
最后一部分我需要帮助,但是如果你知道一个更好的方法来写整个正则表达式,那么它应该只以'C'
开头,第二个字符应该只是'A'
,'F'
,'G'
,'J'
,'K'
或'L'
。在前2个字符之后,可以有一个' '
(空格)字符,后跟1-6位数字。
下面是我想为整个Regex匹配的示例:
CA 123456
CF 1
CK 0467 21
CL 4 2
CG 456-789
CJ 1-23
并且,如果可能(可选),它还应该匹配:
CA546
CJ99-0
CK8 0565
它不应该匹配:
CZ 123456
C 987-123
CA 12345-
CK 12
CJ -456
CL-654
CJ 1234567
3条答案
按热度按时间qnyhuwrf1#
你可以将正则表达式简化为
并实现您的Desired Results
将字符放入字符集
[]
中时不需要|
,单个字符[C]
可以简单地写成C
写入可选字符可以由后跟
?
的任何字符完成,因此可选空格可以写成?
唯一棘手的部分是如何编写
\d{1,5}(-| )\d{1,5}
,以便它只匹配1到6位数字,或者如果数字之间有一个空格或连字符,那么它应该再匹配一个额外的字符来合并该空格或连字符,以便最大匹配字符变为7而不是6,这就是我将在下面的正则表达式部分解释的地方,(?=
-正向前查找,以便\d+[ -]\d+$
或\d{1,6}$
中的任一个应该匹配,这实质上是说,要么匹配(\d+[ -]\d+$
)一个或多个用空格或连字符分隔的数字,并且再次匹配一个或多个数字,否则仅(\d{1,6}$
)匹配1到6个数字[\d -]{1,7}
-最后只捕获数字空格和连字符jyztefdp2#
您可以使用一个单一的前瞻,以确保没有7个连续的数字。
然后匹配1+数字,然后是匹配空格或
-
的可选部分,然后再次匹配1+数字。或者使其更具体,匹配问题中指定的
\d{1,5}
数字说明
^
字符串开头C
按字面匹配[AFGJKL]
匹配所列字符之一(?! ?\d{7})
负先行,Assert不是后跟7个连续数字的可选空格?
匹配可选空格\d+(?:[ -]\d+)?
匹配1+位数字,可选部分匹配空格或-
后跟1+位数字$
字符串结束请参见regex demo。
yeotifhr3#
我可能错了,但我认为regex并没有提供定义最大长度的功能,同时限制特定字符的出现。因此,您需要匹配所有可能的情况。
regex101-link
进一步改进:
x?
,它使匹配器或之前的组成为可选的[asdf]
将匹配字母'a',' s','d',' f'中的任何一个。