2017-05-09 7 views
0

텍스트를 따옴표로 묶어 목록에 넣고 싶습니다. 그것은 단일 또는 이중 qoutes 수 있습니다.tcl 명령을 사용하여 따옴표 안에 텍스트를 저장하고 목록에 저장하는 방법

ex_string : 필요한 경우

% set a {("abc_|a'b" | 'bda' | "bb-'ds" | 'aac'(!) = '--ok')} 
("abc_|a'b" | 'bda' | "bb-'ds" | 'aac'(!) = '--ok') 
% set b [string trim $a {() }] 
"abc_|a'b" | 'bda' | "bb-'ds" | 'aac'(!) = '--ok' 
% set c [string map {{ | } { } { = } { } {(!)} {}} $b] 
"abc_|a'b" 'bda' "bb-'ds" 'aac' '--ok' 
% concat {*}[lmap item $c {format "{%s}" [string trim $item {"'}]}] 
{abc_|a'b} {bda} {bb-'ds} {aac} {--ok} 

나중에 설명하겠습니다 :

("abc_|a'b" | 'bda' | "bb- 'ds" | 'aac'(!)  = '-- ok' : text= 'abc')

와 나는

{abc_|a'b} {bda} {bb- 'ds} {aac} {-- ok} {abc}

답변

2

이 정규 표현식 해결 할 수있는 일의 종류입니다. 필요하지 않은 항목 주위에 중괄호가 없습니다

set str {("abc_|a'b" | 'bda' | "bb- 'ds" | 'aac'(!)  = '-- ok' : text= 'abc')} 
set items [lmap {a b c} [regexp -all -inline {"([^\"]*)"|'([^\']*)'} $str] { 
    string cat $b $c 
}] 
puts "found: $items" 
# found: abc_|a'b bda {bb- 'ds} aac {-- ok} abc 

: 그러나 사후 처리에 결과 (lmapstring cat이 경우의 작업에 대한 완벽한)를 가지고있다. 나는 ... 당신은 일반적으로 그와 OK로 DONAL 휄로우 '대답 유사

1

당신은 이런 식으로 그것을 할 수처럼리스트가되고 싶어요.

문서 : concat, format, lmap (for Tcl 8.5), lmap, set, string, {*} (syntax)

+0

죄송합니다 @ 피터 Lewerin 난 그냥이 게시물을 편집했다. 실제로 white_spaces를 깨서는 안되며, 따옴표 안에없는 텍스트도 잡아서는 안됩니다. –

1

을 기대할 수 있지만, 비 욕심이 정규 표현식을 사용 :

set str {("abc_|a'b" | 'bda' | "bb- 'ds" | 'aac'(!)  = '-- ok' : text= 'abc')} 
set items [lmap {- - s} [regexp -all -inline {(['"])(.*?)\1} $str] {set s}] 
puts "found: $items" 
# found: abc_|a'b bda {bb- 'ds} aac {-- ok} abc