Hey Julia,
Your regex is not doing what you think it’s doing! You can test your regex definition online for example at https://regex101.com.
The ? quantifier only acts on the character directly before it. You’d have to enclose @color in a capturing group to make the whole entity optional.
Also, you have to think about whitespace. If you write @color? @fabric and @color is missing, the regex still expects a space before @fabric!
If you take a look at the example regex in the component’s readme page, you’ll see groups like this:
(?:@pattern\\s+)?
If you are not familiar with regexes, you might want to use this as a template for optional entities. It is an optional non-capturing group by using (?:...)?, it checks for the string @pattern and it accepts any amount of whitespace by using \s+ (note the double backslash, this is required to properly escape the backslash in the rasa training file). When using this, you don’t want to include explicit whitespaces between entities.
A working version of your example could look like this: Online regex tester and debugger: PHP, PCRE, Python, Golang and JavaScript
Also, make sure your regex matches the actual content of the message, not only the entities. For your pattern, I could imagine a user uttering I am looking for red silk with blue stripes. In that case, the “with” should be part of your pattern (you can make it optional) and the @color entity should come before the @pattern entity.