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 ;} {*\generator Riched20 15.0.4420}{*\mmathPr\mwrapIndent1440 }\viewkind4\uc1 \pard\cf1\embo\f0\fs20 クレイグ...\embo0 \embo please\embo0 \embo close\embo0 \embo >out\embo0 \embo of\embo0 \embo your\embo0 \embo old\embo0 \embo client\embo0 \embo >and\embo0 \embo re-open\embo0\f1\par {*\lyncflags rtf=1}}

Lua スクリプトを使用して、RTF タグを削除し、会話のテキストだけを抽出しようとしています。したがって、私の関数の結果は次のようになります。

クレイグ...古いクライアントを閉じて、もう一度開いてください

string.gsub を正規表現で使用してパターンを一致させ、それらを空白に置き換えてテキストのみを残そうとしましたが、機能しません。これまでのstring.gsubのコードは次のとおりです。

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

どんな提案でも大歓迎です!

追加:

user1@capital.com @ 2013-01-18 17:48:03Z (TO: user2@capital.com)

{\rtf1\fbidis\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Segoe UI;}{\f1\fnil Segoe UI;}} {\colortbl ;\red0\green0\blue0; } {*\generator Riched20 15.0.4420}{*\mmathPr\mwrapIndent1440 }\viewkind4\uc1 \pard\cf1\embo\f0\fs20 works\embo0 \embo for\embo0 \embo me..\embo0 \embo how\ embo0 \embo about\embo0 \emboembedding\embo0 \embo pictures?\embo0\f1\par {*\lyncflags rtf=1}}

user1@capital.com @ 2013-01-18 17:48:57Z (TO: user2@capital.com)

{\rtf1\fbidis\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Segoe UI;}{\f1\fnil Segoe UI;}} {\colortbl ;\red0\green0\blue0; } {*\generator Riched20 15.0.4420}{*\mmathPr\mwrapIndent1440 }\viewkind4\uc1 \pard\cf1\embo\f0\fs20 I\embo0 \embo see\embo0 \embo it\embo0\f1\par {* \lyncflags rtf=1}}

user1@capital.com @ 2013-01-18 17:49:27Z (宛先: user2@capital.com)

{\rtf1\fbidis\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Segoe UI;}{\f1\fnil Segoe UI;}} {\colortbl ;\red0\green0\blue0; } {*\generator Riched20 15.0.4420}{*\mmathPr\mwrapIndent1440 }\viewkind4\uc1 \pard\cf1\embo\f0\fs20 Let's\embo0 \embo try\embo0 \embo a\embo0 \embo meeting.\embo0 \f1\par {*\lyncflags rtf=1}}

4

2 に答える 2

2

orLua パターンには、演算子 ( |) やオプションのグループ化 ( )がありません(?:...)?。このようなものがうまくいくかもしれません:

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

戻ります:

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

最初にgsubのすべてのペア{}をそのコンテンツとともにgsub削除し、2 番目はすべての rtf タグを削除します (ただし、スペースを許可するものもあるようですので、パターンを微調整する必要があるかもしれません)。

于 2013-02-04T22:37:09.380 に答える