2016-10-16 2 views
0

나는 당신이TCL을 사용하여 단락이나 페이지를 두 개의 변수로 나누는 방법은 무엇입니까?

regexp "Shipping \(\[^\f]+)" $VarWithWholePage match shipinfo; 

를 다음 그러나 변수에 문자열 전에 모든 것을 배치 할 수있는 문자열을 찾아 TCL을 사용하여 변수로 후 모든 것을 놓고 같은 정규식 수있어?

예를 들면.

문장 번호 1
문장 번호 2
문장 번호 3.
문장 번호 4.
배송
문장 수 5

내 예를 배치 것 "문장 수 5. " shipinfo에,하지만 난 다른 변수에

문장 번호 1
문장 번호 2
문장 번호 3.
문장 번호 4.

을 배치 할 수 있도록하고 싶습니다.

답변

0
regexp "\(.*\)Shipping \(\[^\f]+)" $VarWithWholePage match before after; 

after 년 후 before에서 "배송"전에 텍스트 부분을 넣어해야합니다.

P. 나는 왜 당신이 ^\f을 사용하는지 모르지만, 좋은 이유가 있다면 첫 번째 서브 표현식에서도 사용할 수 있습니다.

+0

\ f를 사용하면 페이지 끝까지 여러 문장을 읽을 수 있습니다. – Frank

+0

고마워요.이게 정확히 내가 원하는 걸 잘 했어. – Frank

+0

프랭크.이 대답이 네가 원하는대로하면 받아 들여야 해. –

0

하지만 문자열 앞에있는 모든 것을 변수에 넣을 수 있습니까?

이 작업을 수행하는 가장 간단한 방법은 regexp 당신에게 경기 대신 일치하는 하위 문자열의 인덱스를 말할 얻을 수 있습니다. 그런 다음 string range을 사용하여 원하는 부품을 얻을 수 있습니다. 이 시점에서

regexp -indices "Shipping \(\[^\f]+)" $VarWithWholePage match shipinfo 

, matchshipinfo는 경기가 입력 문자열 내에서 일어난 위치를 정확하게 나타내는 숫자 쌍을해야합니다. 일치하는 경우 성공했습니다.

# Now we can get the bits before (and after) the match with simple operations 
set beforeMatch [string range $VarWithWholePage 0 [expr {[lindex $match 0] - 1}]] 
set afterMatch [string range $VarWithWholePage [expr {[lindex $match 1] + 1}] end] 

# Convert the string ranges into the matched substrings so that your code still works 
set match [string range $VarWithWholePage {*}$match] 
set shipinfo [string range $VarWithWholePage {*}$shipinfo] 

각주 : 그것은 일반적으로 괄호로 정규 표현식을 넣어 아주 좋은 생각으로 당신의 RE는 관용구 {Shipping ([^\f]+)}로 기록 될 것이다. 그것은 역 슬래시와 싸웁니다.

+0

감사합니다. 조금 지나칠 정도의 과잉이지만, 내가 필요할 때를 알면 좋다. 중괄호 팁에 감사드립니다. – Frank

관련 문제