This code:
tasks:
- set_fact:
keytype: ed25519
- set_fact:
matchstring: ".*_{{ keytype }}_.*"
- debug:
var: item
with_fileglob: "/etc/ssh/ssh_host_*_key"
when: not item is match(matchstring)
selects just
/etc/ssh/ssh_host_ed25519_key
which seems analogous to the OP's requirement.
It seems that "match" requires a pattern that matches the whole string, hence the *. before and after that string to be matched.
Two separate "set_fact" stanzas are needed so that "keytype" is set before it is used.
The code works in Ansible 2.4.3.0 running on Debian 9 (Raspbian "Stretch").
My application required "not" in the "when" statement but it would not be needed to answer the original question.
For the OP, the critical statement would appear to be:
matchstring: "^vcsourcekit.*"
Clearly too late to help the OP but the approach might help someone else.