加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何构建一个关注出现次数而不是出现位置的正则表达式?

发布时间:2020-12-14 05:48:27 所属栏目:百科 来源:网络整理
导读:我想构建一个匹配以下字符串的正则表达式: 包含全部或部分4个字符“A”,“B”,“C”和“D”的字符串 “ABCD”最多可以出现在任何位置一次. 例如,预计以下内容匹配: A,AB,CABD,DC,BDCA,ABC,... 以下内容不匹配: ABA,BB,ABCC,DDAA,AACD... 你对我有什么建议
我想构建一个匹配以下字符串的正则表达式:

包含全部或部分4个字符“A”,“B”,“C”和“D”的字符串

“ABCD”最多可以出现在任何位置一次.
例如,预计以下内容匹配:

A,AB,CABD,DC,BDCA,ABC,...

以下内容不匹配:

ABA,BB,ABCC,DDAA,AACD...

你对我有什么建议吗?

解决方法

这个应该这样做(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
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读