我需要一种颜色的正则表达式,可以这样描述:
以#开头 然后是3对相同的十六进制字符(0-9,a-f,A-F)。 aA和Aa也是相同的对
现在我有#(([0-9A-Fa-f]){2}){3}
如何为相同的十六进制字符对制作正则表达式?
匹配字符串的一些示例: “#FFFFFF” “#000000”, “#AAAAAA” “#050505”, “### 93#0b0B0b1B34”
“#000100”之类的字符串不应与
匹配答案 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