2015-02-16 4 views
0

Я следующая строкаКак удалить символ в строку, используя TCL

«TCL известен как„командный язык инструментов“, TCL известен как„инструмент командного языка“, TCL известна как «командный язык инструмента» «

из вышеприведенного ввода я хочу вывод, как показано ниже

» TCL известен как командный язык инструмента, TCL известен как команда инструмента языка, TCL известен как командный язык инструмента»

т.е. only first and last double quotes should be displayed on output, and all other should be deleted, Может кто-то дайте мне знать различные способы достижения этого

ответ

2

Там может быть много способов. Я попытался с regsub

set str {"TCL is known as "tool command language", TCL is known as "tool command language", TCL is known as "tool command language""} 
puts "Input : $str" 
regsub -all {(.)"} $str {\1} output 
puts "Output : $output" 

, который будет производить следующее

Input : "TCL is known as "tool command language", TCL is known as "tool command language", TCL is known as "tool command language"" 
Output : "TCL is known as tool command language, TCL is known as tool command language, TCL is known as tool command language" 

Узор Я использовал это (.)". В регулярных выражениях атом . будет соответствовать любому одиночному символу. (Будет говорить об использовании скобок внизу). Затем одна цитата. Итак, в основном, это будет соответствовать любому одиночному символу и рядом с ним, как показано ниже.

enter image description here

Как вы можете видеть, у нас есть в общей сложности 6 матчей. Возьмем 2-й матч, который равен e". Наша главная цель - удалить цитаты. Но мы подобрали 2 символа. Вот почему мы сгруппировали его с круглыми скобками.

С Tcl мы можем получить доступ к 1-й подгруппе с помощью \1 и 2-й подгруппы с \2 и так далее. Наконец, мы заменяем 2 символа одним символом, который является ничем иным, кроме первой буквы, кроме цитаты. то есть e" заменяется символом e.

Обратите внимание на использование флага -all в начале, который отвечает за соответствие всем случаям этого образца.

Примечание:\1 следует использовать фигурные скобки, как {\1}, как я уже упоминал. В случае, если вы хотите получить к нему доступ без скобок, вы должны использовать \\1

Код: Non-capturing subpatterns

+0

Привет, динешь, не могли бы вы рассказать мне, как его соответствие в шесть раз, а затем как его заменить на этот шаблон? – velpandian

+0

@velpandian: Я обновил свой ответ. Пожалуйста, проверьте. – Dinesh

+0

Dinesh благодарит за ваш быстрый ответ, как вы сказали (.) «Будет соответствовать любому персонажу», должен быть там. Мой вопрос в том, что если вы видите конец строки ввода, заканчивающийся на языке "", поэтому здесь должно быть 2 совпадения в этой конкретной области e "и", но мы получаем 1 совпадения в этой области, не могли бы вы пояснить это part .. Спасибо – velpandian

1

Вы можете удалить все кавычки и повторно добавить внешние. Один из способов:

set new [format {"%s"} [string map {{"} {}} $str]] 
1

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

set transformedString [regsub -all {(.)[""]+(.)} $inputString {\1\2}] 

" удваивается и в [ скобках ] просто сделать подсветку здесь работу. Вместо этого вы можете использовать {(.)"+(.)}.

+0

Привет, не могли бы вы объяснить, как работает эта подстановка, и любезно дайте мне знать какие-либо документы regsub, у меня есть основное понимание регулярного выражения – velpandian

Смежные вопросы