我有一个从 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/