2013-02-04 5 views
3

RTF 서식 태그가있는 Microsoft Lync 대화에서 값을 가져 오는 파일이 있습니다. 일례 파일 것 같은루아 패턴 일치

{\ rtf1 \ fbidis \ ANSI \ ansicpg1252 \ deff0 \ nouicompat \ deflang1033 {\ fonttbl {\ F0 \ fnil \ fcharset0> Segoe UI} {\ F1 \ fnil Segoe의 UI ;}} {\ colortbl; \ red0 \ green0 \ blue0} {* \ 발전기 Riched20 15.0.4420} {* \ mmathPr \ mwrapIndent1440} \ viewkind4 \ uc1 \ pard \ cf1 \ embo \ f0 \ fs20 크레이그. .. \ embo0 \ embo 제발 \ embo0 \ embo \ embo0 \ embo \ embo0 \ embo0 \ embo0 \ embo0 \ embo0 \ embo0 \ embo0 \ embo 클라이언트 \ embo0 \ embo>와 \ embo0 \ embo는 \ open \ embo0 \ f1 \ par {* \ lyncflags rtf = 1}}

루아 스크립팅을 사용하고 있습니다. RTF 태그를 제거하고 대화의 텍스트를 꺼내십시오. 그래서 내 함수의 결과는 다음과 같아야합니다

크레이그는 ... 이전 클라이언트 밖으로 닫으십시오 다시 열어야 I가 일치하는 정규식으로 string.gsub를 사용하려고했습니다

패턴을 만들고 빈 공간으로 바꿔 텍스트 만 남기고 작동하지 않습니다. 다음은 string.gsub에 대한 지금까지 가지고있는 코드입니다.

result = string.gsub(s, "\{\*?\\[^{}]+}|[{}]|\\\n?[A-Za-z]+\n?(?:-?\d+)?[ ]?", " ") 

어떤 제안이라도 대단히 감사하겠습니다!

추가 : rtf1 \

{48 : : : 03Z ([email protected] TO)

[email protected] 17 2013년 1월 18일 @ \ fbidis \ ansi \ ansicpg1252 \ deff0 \ nouicompat \ deflang1033 {\ fonttbl {\ f0 \ fnil \ fcharset0 Segoe UI;} {\ f1 \ Seile UI;}} {\ colortbl; \ red0 \ green0 \ blue0}} {* \ generator Riched20 15.0.4420} {* \ mmathPr \ mwrapIndent1440} \ viewkind4 \ uc1 \ pard \ cf1 \ embo \ f0 \ fs20 작품 \ embo0 \ embo \ embo0 \ embo me \ embo0 \ embo \ embo0 \ embo \ embo0 \ embo \ embo0 \ embo embedding \ embo0 \ embo 사진은 \ embo0 \ f1 \ 파 {* \ lyncflags RTF = 1}}

[email protected] 2013년 1월 18일 @ 17 : 48 : (TO : [email protected]) 57Z

\ fbidis \ ansi \ ansicpg1252 \ deff0 \ nouicompat \ deflang1033 {\ font0} \ blue0;} {* \ generator Riched20 15.0.44 {* \ lyncflags rtf = 1} {embl0} \ embo0 \ embo0 \ embo0 \ f1 \ par {* \ lyncflags rtf = 1} }

[email protected] 2013년 1월 18일 17 @ : 49 : 27Z (TO : 사용자 2 @ 자본.COM)

{\ rtf1 \ fbidis \ ANSI \ ansicpg1252 \ deff0 \ nouicompat \ deflang1033 {\ fonttbl {\ F0 \ fnil \ fcharset0 Segoe UI} {\ F1 \ fnil Segoe UI;}} {\ colortbl; \ red0 \ green0 \ blue0;} {* \ 발전기 Riched20 15.0.4420} {* \ mmathPr \ mwrapIndent1440} \ viewkind4 \ uc1 \ pard \ cf1 \ embo \ f0 \ fs20 \ embo0 \ embo 해보기 \ embo0 \ 엠보 \ embo0 \ EMBO 회의. \ embo0 \ F1을의 \ 파 {* \ lyncflags RTF = 1}}

+0

StackOverflow에 오신 것을 환영합니다! 어떤 결과를 얻었습니까? – andrewdotnich

+0

결국 패턴 일치 솔루션으로 만족스럽지 않으면 [lpeg] (http://www.inf.puc-rio.br/~roberto/lpeg/lpeg.html) 라이브러리를 확인해보십시오. – hugomg

답변

2

루아 패턴 or 사업자 (|) 또는 옵션 그룹 ((?:...)?)가 없습니다. 이런 식으로 뭔가 작동 할 수 있습니다

s:match("{(.+)}"):gsub("%b{}", ""):gsub("\\%w+", "") 

는 반환합니다

" Craig... please close >out of your old client >and re-open " 

먼저 gsub 자신의 콘텐츠와 함께 {}의 모든 쌍을 제거, 두 번째 gsub 모든 RTF 태그를 제거합니다 (일부있을 것 같다 있지만 그 공백을 허용하므로 패턴을 미세 조정해야 할 수도 있음).

+0

가깝지만, 어떤 경우에는 다음과 같이 나타납니다. 내 오류로 nil 값을 인덱싱하려고 시도했습니다. –

+0

예제가 있습니까? –

+0

위의 문제점 진술에 추가 된 추가 정보. 전자 메일 주소가 들여 쓰여진 곳에서는 서식에 2보다 큰 문자가 있습니다. –