简体   繁体   中英

Trouble understanding the output of this regex

I'm trying to create a regex to catch all hexadecimal colors in a string literal. I'm using Python 3, and that's what I have:

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

However, when I apply the findall regex method on #abcdef here's what I get:

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

Can someone explain me why do I have that? I actually need to get ["#abcdef"] Thank you in advance

Thanks to Andrej Kesely , I got the answer to my question, that is:

Regex will return capturing group.

To bypass this, just change the regex from:

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

to:

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

According to http://regex101.com : 正则表达式说明

It looks like this regex is looking for

#(three characters a through f, A through F or a digit)(three characters a through f, A through F or a digit, which may or may not be present, and if they are they are what is returned from the match)

If you are looking to match any instance of the whole above string, I would recommend this instead:

#[a-fA-F\\d]{6} 在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM