难以理解此正则表达式的输出

时间:2019-08-04 17:56:36

标签: python regex

我正在尝试创建一个正则表达式来捕获字符串文字中的所有十六进制颜色。我正在使用Python 3,这就是我所拥有的:

import re
pattern = re.compile(r"#[a-fA-F\d]{3}([a-fA-F\d]{3})?")

但是,当我在findall上应用#abcdef regex方法时,我得到的是:

>>> re.findall(pattern,"#abcdef") 
["def"] 

有人可以解释一下我为什么要这么做吗?我实际上需要得到["#abcdef"] 预先谢谢你

2 个答案:

答案 0 :(得分:1)

感谢Andrej Kesely,我得到了我的问题的答案,即:

  

正则表达式将返回捕获组。

要绕过此操作,只需将正则表达式更改为:

r"#[a-fA-F\d]{3}([a-fA-F\d]{3})?"

收件人:

r"#[a-fA-F\d]{3}(?:[a-fA-F\d]{3})?"

答案 1 :(得分:0)

根据http://regex101.comRegex Description

该正则表达式正在寻找

#(三个字符a到f,A到F或一个数字)(三个字符a到f,A到F或一个数字,可能存在也可能不存在,如果是,则是从中返回的内容比赛)

如果您希望匹配上述整个字符串的任何实例,那么我建议您这样做:

#[a-fA-F\d]{6} enter image description here