python regexp 3相同的[0-9A-Fa-f]对

时间:2017-11-09 11:01:46

标签: python regex hex

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

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

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

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

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

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

匹配

2 个答案:

答案 0 :(得分:2)

使用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 正则表达式标志

答案 1 :(得分:1)

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

#([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