Как использовать regsub или regex в Tcl для удаления начальных и конечных символов из "начального" периода
Извлечение частей текста из предложения / строки с помощью regex
а также regsub
функции - левый и правый. Например строка:
- номер урока @12.4.1@_01.html
мне нужно regsub
и / илиregex
оставить только фрагмент между "@".
Оставаясь так: 12.1.4 остальное может стереть все левые и правые излишки.
В другом сценарии, в Bash, а не в Tcl. Я могу это сделать так:
Я задаю этот вопрос, скорее, для обучения. То есть научиться использовать собственные возможности этого языка Tcl вместо того, чтобы полагаться на саму команду Unix-Like.
Как создать регулярное выражение для выполнения этой команды? Заранее спасибо...
2 ответа
Я предпочитаю думать о выборе текста между@
символы. Для этого мы используемregexp
(с группой захвата). В этом случае проще всего использовать нежадную внутреннюю деталь.
regexp {@(.*?)@} $var -> wantedBit
puts $wantedBit
Обратите внимание, что ->
- это фиктивное имя переменной, которое принимает весь текст совпадения (которое нас не интересует).
Можно сделать код, который больше похож на этот код sed, с помощью regsub
:
set var [regsub {^.*@(.*)@.*$} $var {\1}]
Диалект регулярных выражений немного отличается.
Почему требуется использовать регулярное выражение? Эту проблему легко решить без него, используяsplit
а также lindex
:
set var "learning lesson number@12.4.1@_01.html"
puts [lindex [split $var @] 1]