我正在尝试检查字符串的长度可以为3或6的模式;不是它们之间的价值。
这是字符串:
color: #FfFdF8; background-color:#aef;
我想让所有子字符串都#
以十六进制代码开头,如果它们的长度为3或6,并且不位于字符串的开头;在这种情况下,两个#FfFdF8
和#aef
应退还。
我已经写了这个模式:
r'^(?!#).+(#[a-fA-F0-9]{6}).*|^(?!#).+(#[a-fA-F0-9]{3}).*'
但它给了我[('#FfFdF8', '')]
的结果re.findall
。
您可以先检查字符串是否以开头,#
如果不是,则提取#...
子字符串:
import re
results = []
s = 'color: #FfFdF8; background-color:#aef;'
if not s.startswith('#'):
results = re.findall(r'#[a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?\b', s)
print(results) # => ['#FfFdF8', '#aef']
正则表达式详细信息
#
-一个#
字符[a-fA-F0-9]{3}
-3个十六进制字符(?:[a-fA-F0-9]{3})?
-三个十六进制字符的可选序列\b
-单词边界(不允许在右侧添加更多十六进制字符)本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句