正则表达式用于匹配十六进制表示法中的灰色

时间:2014-10-20 04:37:00

标签: regex

我有一个XML文件,包含(在很多其他东西中)十六进制颜色代码。我想检查所有导致灰色阴影的代码。模式是

  • 哈希标记(#)然后
  • [a-fA-F0-9]正好重复3或6次
  • [^ A-FA-F0-9]

所以它应该匹配#eee,#EEEEEE,#333333但不是#00006d,#123456等等。关于正则表达式,理想情况下它应该在 Notepad ++ 中工作,如果没有选项,则Python 2.7是另一种选择。

我尝试使用我找到here的反向引用运算符。到目前为止,我最好的尝试是

#([0-9a-fA-F])\1{3}[^0-9a-fA-F]

但我遇到了一些麻烦:

  • 我似乎应该将{3}替换为{2}以匹配正好三次重复,但我不明白为什么
  • 我对如何匹配6次重复也毫无头绪。我认为{3,6}应该匹配3次,4次,5次或6次重复,但我怎样才能排除4次和5次重复?我想过#([0-9a-fA-F])\1{3}[^0-9a-fA-F]|#([0-9a-fA-F])\1{6}[^0-9a-fA-F]但是必须有一个不那么难看的语法,对吗?

2 个答案:

答案 0 :(得分:1)

您可以使用正则表达式:

#([0-9A-Fa-f])([0-9A-Fa-f])((?=\2)\1|(?:\1\2){2})\b

RegEx Demo

这应该适用于PCRE或Python。

答案 1 :(得分:-2)

#([0-Fa-f][0-Fa-f])(\1{2}|\1{5})\b

匹配#AAA#AAAAAA以及#ABABAB类型灰色。

BTW,[0-Fa-f][0-9a-fA-F]相同。

编辑:我是蓉。