One way is to define a calculated field as below that has the value 1 for data records that contain the string "vehicles" in the field [My Field], regardless of which characters are upper or lower case. Let's Say you call this calculated field Has Vehicles
int(contains(lower([My Field]), “vehicles”))
Then if you drag the calculated field you just defined to a shelf as a measure, then you can count the number of records that contain that string, with the aggregation function, SUM - as in SUM([Has Vehicles])
You can use the field as dimension or filter instead to separate records that have vehicles from those that don't. Or use other aggregation functions to determine the percentage of records that have vehicles, using AVG() instead of SUM(), since the the field only has values 0 or 1. Or use MIN() or MAX() or STDEV() etc.
You can also use a parameter for your text string to allow the user to type or choose different strings, instead of hard coding it to the string "vehicles"
For more complex text analytics, consider using regular expression functions instead of contains, or doing some pre-processing with Tableau Prep, Python or other tools to clean and normalize the text data up front.