Если бы вы просто смотрели, содержит ли строка _
, -
, _
, -
в этом порядке с произвольным случайным мусором между ними, мы могли бы сделать это двумя способами (вы можете заменить другоеразделители, но для .
требуется специальная обработка в регулярном выражении; подойдет либо [.]
, либо \.
):
regexp {_.+-.+_.+-} $stringToMatchAgainst
string match {*_*-*_*-*} $stringToMatchAgainst
OK, технически последний (сопоставление глобуса)соответствует чему-то немного другому, но эффект похож.
Однако я не уверен, что вышесказанное - это то, что вы действительно ищете.Похоже, вы действительно после word
с?Возможно также разделители.
Чтобы получить список слов, мы используем несколько иную технику (не можем использовать \w
, поскольку она также соответствует подчеркиванию, потому что это часто встречается в идентификаторах):
set wordList [regexp -all -inline {[a-zA-Z0-9]+} $stringToMatchAgainst]
Если вы также используете разделители, самый простой способ - использовать textutil::split::splitx
из Tcllib:
package require textutil::split
set tokenList [textutil::split::splitx $stringToMatchAgainst {([-_.])} ]
В последнем случае с входной строкойword_word-word_word_word-word
это дает такой вывод:
word _ word - word _ word _ word - word