我有一个从 Microsoft Lync 对话中提取值获得的文件,该对话具有 RTF 格式标记。示例文件如下所示:



使用 Lua 脚本,我正在尝试删除 RTF 标签并提取对话文本。所以我的函数的结果应该是:



我试过使用带有正则表达式的 string.gsub 来匹配模式并用空格替换它们以只留下文本但它不起作用。这是迄今为止我为 string.gsub 编写的代码:

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

任何建议将不胜感激!

额外的:



{\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 for\embo0\embo me..\embo0\embo how\embo0\embo about\embo0\embo embedding\embo0\embo Pictures?\embo0\f1\par
{*\lyncflags rtf=1}}



{\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}}



{\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}}

最佳答案

Lua 模式没有 or 运算符 ( | ) 或可选分组 ( (?:...)? )。像这样的事情可能会奏效:

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

将返回:
"    Craig...  please  close  >out  of  your  old  client  >and  re-open "

第一个 gsub 删除所有 {} 对及其内容,第二个 gsub 删除所有 rtf 标签(尽管似乎有一些允许其中包含空格,因此您可能需要调整模式)。

关于Lua 模式匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14696727/

10-12 06:07