我想构建一个与以下字符串匹配的正则表达式:
包含全部或部分4个字符“A”,“B”,“C”和“D”的字符串
“ABCD”最多可以在任何位置发生一次。 例如,预计以下内容匹配:
A,AB,CABD,DC,BDCA,ABC,...
以下内容不匹配:
ABA,BB,ABCC,DDAA,AACD...
你对我有什么建议吗?
答案 0 :(得分:2)
这个应该这样做(Python语法):
if re.match(r"""
# Match string having max one each of A, B, C or D.
^ # Anchor to start of string.
(?=[^A]*(?:A[^A]*)?$) # Assert zero or one A max.
(?=[^B]*(?:B[^B]*)?$) # Assert zero or one B max.
(?=[^C]*(?:C[^C]*)?$) # Assert zero or one C max.
(?=[^D]*(?:D[^D]*)?$) # Assert zero or one D max.
[ABCD]+ # One or more of [ABDC].
\Z # Anchor to end of string.
""", text, re.VERBOSE):
# Successful match at the start of the string
else:
# Match attempt failed
这是一个JavaScript版本:
var re = /^(?=[^A]*(?:A[^A]*)?$)(?=[^B]*(?:B[^B]*)?$)(?=[^C]*(?:C[^C]*)?$)(?=[^D]*(?:D[^D]*)?$)[ABCD]+$/;
if (re.test(text)) {
// Successful match
} else {
// Match attempt failed
}
答案 1 :(得分:1)
反转您的测试。尝试:
([ABCD]).*\1
即,查找4个字符中的一个,后面必须跟随一组任意字符(甚至为空),然后是您先匹配的字符。
如果您有匹配,则该字符串与您的期望不符。