2012-11-22 2 views
1

저는 TCL이나 TCL regexp에 익숙하지 않습니다. 하지만 TCL 메커니즘/regexp가 필요합니다.이 정규 표현식은 라인/문장이 주어지면 단어에 몇 가지 특수 문자가 있음을 알리거나 배제 할 수 있습니다.TCL : regexp는 문자가있는 문자열을 제외합니다.

(space)(space)At 4:00:00AM (not sure) please do your work ... 

지금 내가 foreach는 사용 루프 각 단어를 얻을 수있는 라인을 분할하려고 :

% set fields [split " At 4:00:00AM (not sure) please do your work" " " ] 
{} {} {} At 4:00:00AM (not sure) please do your work 

을하지만 다시 내가 할

내가 선/문장 뭔가 아래와 같이 있다고 가정 하지 원하는 빈 필드 : 나는 foreach는 화장실에서 단어를 제외 할 것과 또한

% foreach val $fields { 
     puts $val 
} 



At 
4:00:00AM 
(not 
sure) 
please 
do 
your 
work 

등의 특수 문자가 P :

(not 
sure) 
4:00:00AM 

단어가 가진 제외를 '('또는 ':'시작, 끝 또는 어디서나 단어입니다.

어떻게하면 되나요?

답변

0

불행히도 Tcl regexp는 룩어 드 연산자를 지원하지 않습니다. 그렇지 않으면 하나의 regexp로이를 수행 할 수 있습니다.

set the_line " At 4:00:00AM (not sure) please do your work" 
set fields {} 
foreach {- val} [regexp -all -inline -- {(?:^|\s)([^:()\s]+(?=\s|$))} $the_line] { 
    lappend fields $val 
} 
1
set str " At 4:00:00AM (not sure) please do your work" 

# split the string into space-delimited words 
set words [regexp -inline -all {\S+} $str] 

# eliminate words containing a character other than letters, numbers, underscore 
set alnum_words [lsearch -inline -regexp -all -not $words {\W}] 

alnum_words 지금 목록 {At please do your work}

만 만 문자로 이루어진 단어를 원하는 경우를 포함, 사용 : 는, 당신은 당신이 필요로 단어의 목록을 구성하기 위해 다음과 같은 코드를 사용할 수 있습니다

lsearch -inline -regexp -all $words {^[[:alpha:]]+$} 
관련 문제