Regex – слова соответствия, которые не являются строками

Я пытаюсь различать слова и строки. Мне удалось заставить строки работать, но я не могу понять, как сопоставлять слова, которые не окружены двойными кавычками:

Поэтому я хочу, чтобы это соответствовало:

test 

Но это не должно совпадать:

 "test" 

Это то, что у меня есть до сих пор:

 [^\"][a-zA-Z]*[^\"] 

Он все еще получает тест, хотя он окружен двойными кавычками.

 Input: "\"this is a string\" word" Expected Output: word 

Какие-либо предложения?

Как насчет этого?

 assert("\"<quoted>\" word".words == listOf("word")) assert("head \"<quoted>\" word".words == listOf("head", "word")) assert("head\"<quoted>\"word".words == listOf("head", "word")) assert("\"<escaped\\\"quoted>\"".words == emptyList()) assert("; punctuations , ".words == listOf("punctuations")) 

 inline val String.words get() = dropStrings().split("[^\\p{Alpha}]+".toRegex()) .filter { it.isNotBlank() } @Suppress("NOTHING_TO_INLINE") inline fun String.dropStrings() = replace("\"(\\[\"]|.*)?\"".toRegex(), " ")