I finally solved this using the different match-types:
<C:filter>
<C:prop-filter name="CATEGORIES" test="anyof">
<C:text-match collation="i;unicode-casemap"
match-type="equals">value</C:text-match>
<C:text-match collation="i;unicode-casemap"
match-type="contains">,value,</C:text-match>
<C:text-match collation="i;unicode-casemap"
match-type="ends-with">,value</C:text-match>
<C:text-match collation="i;unicode-casemap"
match-type="starts-with">value,</C:text-match>
</C:prop-filter>
</C:filter>
Detail:
Match if any of the contained text-matches is matching (Logic OR):
<C:prop-filter name="CATEGORIES" test="anyof">
This text-match will match values exactly equal to the value (this is the value being the only value in the comma separated list):
<C:text-match collation="i;unicode-casemap"
match-type="equals">value</C:text-match>
This will match values containing the value between two commas (this is the value in some middle part of the comma separated list):
<C:text-match collation="i;unicode-casemap"
match-type="contains">,value,</C:text-match>
This will match values ending with a comma followed by the value (this is the value in the last position of the comma separated list):
<C:text-match collation="i;unicode-casemap"
match-type="ends-with">,value</C:text-match>
This will match values starting with the value followed by a comma (this is the value in the first position of the comma separated list):
<C:text-match collation="i;unicode-casemap"
match-type="starts-with">value,</C:text-match>
In this way this will only match full values in the comma separated list.