chriddyp pointed me to the Dynamic Options example on https://dash.plotly.com/dash-core-components/dropdown and I solved it using:
return [o for o in options if re.match(search_value, o[“label”], re.IGNORECASE)]
for front matches only or:
opt = [o for o in options if re.match(search_value, o[“label”], re.IGNORECASE)]
opt.extend([o for o in options if o not in opt and search_value in o[“label”]])
return opt
for front matches, then body matches