需要帮助改进Ruby正则表达式以消除RTF中的控制字并获取文本

时间:2018-07-19 23:09:41

标签: ruby regex rtf

我具有RTF文件中的以下text_data:

"{\\rtf1\\ansi\\deff3\\adeflang1025\n{\\fonttbl{\\f0\\froman\\fprq2\\fcharset0 Times New Roman;}{\\f1\\froman\\fprq2\\fcharset2 Symbol;}{\\f2\\fswiss\\fprq2\\fcharset0 Arial;}{\\f3\\froman\\fprq2\\fcharset128 Times New Roman;}{\\f4\\fswiss\\fprq2\\fcharset128 Arial;}{\\f5\\fnil\\fprq2\\fcharset128 Droid Sans Fallback;}{\\f6\\fnil\\fprq2\\fcharset128 DejaVu Sans;}{\\f7\\fswiss\\fprq0\\fcharset128 DejaVu Sans;}}\n{\\colortbl;\\red0\\green0\\blue0;\\red128\\green128\\blue128;}\n{\\stylesheet{\\s0\\snext0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\hich\\af5\\langfe2052\\dbch\\af6\\afs24\\lang1081\\loch\\f3\\fs24\\lang1033 Default;}\n{\\s15\\sbasedon0\\snext16\\sb240\\sa120\\keepn\\hich\\af5\\dbch\\af6\\afs28\\loch\\f4\\fs28 Heading;}\n{\\s16\\sbasedon0\\snext16\\sb0\\sa120 Text body;}\n{\\s17\\sbasedon16\\snext17\\sb0\\sa120\\dbch\\af7 List;}\n{\\s18\\sbasedon0\\snext18\\sb120\\sa120\\noline\\i\\dbch\\af7\\afs24\\ai\\fs24 Caption;}\n{\\s19\\sbasedon0\\snext19\\noline\\dbch\\af7 Index;}\n}{\\info{\\creatim\\yr2018\\mo7\\dy15\\hr11\\min52}{\\revtim\\yr0\\mo0\\dy0\\hr0\\min0}{\\printim\\yr0\\mo0\\dy0\\hr0\\min0}{\\comment OpenOffice}{\\vern4140}}\\deftab709\n\n{\\*\\pgdsctbl\n{\\pgdsc0\\pgdscuse195\\pgwsxn12240\\pghsxn15840\\marglsxn1134\\margrsxn1134\\margtsxn1134\\margbsxn1134\\pgdscnxt0 Default;}}\n\\formshade\\paperh15840\\paperw12240\\margl1134\\margr1134\\margt1134\\margb1134\\sectd\\sbknone\\sectunlocked1\\pgndec\\pgwsxn12240\\pghsxn15840\\marglsxn1134\\margrsxn1134\\margtsxn1134\\margbsxn1134\\ftnbj\\ftnstart1\\ftnrstcont\\ftnnar\\aenddoc\\aftnrstcont\\aftnstart1\\aftnnrlc\n\\pgndec\\pard\\plain \\s0\\nowidctlpar{\\*\\hyphen2\\hyphlead2\\hyphtrail2\\hyphmax0}\\cf0\\kerning1\\hich\\af5\\langfe2052\\dbch\\af6\\afs24\\lang1081\\loch\\f3\\fs24\\lang1033{\\rtlch \\ltrch\\loch\nI like to read.}\n\\par }"

使用以下表达式和命令,我想删除除“我喜欢阅读”的实际文本以外的所有内容。

 text = text_data.gsub(/({?\\\s?\*?\w+\;?\s?+\\?n?)|(\w+.+\;}?\)?\s?)|(}\s?)|(\\\s?)|({\\\s?\*?\s?)/, "")

这个表达式在rubular.com上几乎可以用,但是在我的本地服务器上,它的输出是:

"ansiadeflang1025\nyr2018dy15min52yr0dy0min0yr0dy0min0OpenOffice\npaperh15840margl1134margt1134sectdsectunlocked1pgwsxn12240marglsxn1134margtsxn1134ftnbjftnrstcontaenddocaftnstart1pgndecplain owidctlparhyphlead2hyphmax0kerning1af5dbchafs24lochfs24ltrchI like to read."

任何帮助将不胜感激。

0 个答案:

没有答案