【问题标题】:python regexp 3 the same pairs of [0-9A-Fa-f]python 正则表达式 3 相同的 [0-9A-Fa-f] 对
【发布时间】:2018-04-22 08:18:37
【问题描述】:

我需要一些颜色的正则表达式,可以这样描述:

以#开头 然后是 3 个相同的十六进制字符对(0-9、a-f、A-F)。 aA 和 Aa 也是同一对

现在我有 #(([0-9A-Fa-f]){2}){3}

如何为相同的十六进制字符对创建正则表达式?

匹配字符串的一些示例: "#FFFFFF", "#000000", "#aAAAaA", "#050505", “###93#0b0B0b1B34”

“#000100”之类的字符串不应匹配

【问题讨论】:

  • 为什么要匹配这个"###93#0b0B0b1B34"
  • 它的内容#0b0B0b

标签: python regex hex


【解决方案1】:

带有re.search()功能:

import re

s = '#aAAaaA'
match = re.search(r'#([0-9a-z]{2})\1\1', s, re.I)
result = match if not match else match.group()

print(result)

  • \1 - 指向第一个括号组(...)

  • re.I - IGNORECASE 正则表达式标志

【讨论】:

    【解决方案2】:

    您可以将以下正则表达式与捕获组和反向引用一起使用:

    #([0-9A-Fa-f]{2})\1{2}
    

    regex demo

    详情

    • # - 一个#
    • ([0-9A-Fa-f]{2}) - 第 1 组:2 个十六进制字符
    • \1{2} - 连续 2 次出现与第 1 组中捕获的相同值。

    注意:需要不区分大小写标志以使\1 反向引用以不区分大小写的方式匹配第 1 组的内容。请记住,我们需要使用原始字符串文字来定义正则表达式以避免过度转义反向引用。

    Python demo

    import re
    strs = ["#FFFFFF","#000000","#aAAaaA","#050505","###93#0b0B0b1B34", "#000100"]
    for s in strs:
        m = re.search(r'#([0-9A-Fa-f]{2})\1{2}', s, flags=re.I)
        if m:
            print("{} MATCHED".format(s))
        else:
            print("{} DID NOT MATCH".format(s))
    

    结果:

    #FFFFFF MATCHED
    #000000 MATCHED
    #aAAaaA MATCHED
    #050505 MATCHED
    ###93#0b0B0b1B34 MATCHED
    #000100 DID NOT MATCH
    

    【讨论】:

      猜你喜欢
      • 2013-08-24
      • 2020-12-25
      • 2011-03-18
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多