我有一些损坏的rtf文件,其中的行如下:
{\s39\li0\fi0\ri0\sb0\sa0\ql\vertalt\fs22 Fußzeile Zchn;}
^----------------------------^
我想替换所有[^ a-zA-Z0-9 _ \ {}; ] 但只能在" {\ s"并以"}结束;"从第一个"空间"到"};"
第一个"空间"和"};"不应该被替换。
答案 0 :(得分:1)
您没有指定语言,这里是Regex101示例:
({\\s.+?\s)(.*)(})
答案 1 :(得分:1)
所以,我不确定你想在这里使用哪种语言/技术,但如果使用C#是一个选项,你可以查看这个previous question。答案几乎可以帮助你。
对于你的例子:
var text = @"{\s39\li0\fi0\ri0\sb0\sa0\ql\vertalt\fs22 Fußzeile Zchn;}";
var pattern = @"^({\\s\S*\s[a-zA-Z0-9_\{}; ]*)([^a-zA-Z0-9_\{}; ]*)([^}]*})";
var replaced = System.Text.RegularExpressions.Regex.Replace(text, pattern, "$1$3");
这将让你替换一个连续的坏字符blob,这可以解决你的例子,但不幸的是,不是你的问题。可能有一个更优雅的解决方案,但我认为你必须迭代运行该表达式,直到Regex.Replace()的输入和输出相等。
答案 2 :(得分:0)
如果您可以在终端中使用sed
,则可以执行以下操作。
sed -i 's/^\({\\s[^ ]*\s\).*\(\;}\)\(}\)\?$/\1\2/' filename
转动我的文件包含:
{\s39\li0\fi0\ri0\sb0\sa0\ql\vertalt\fs22 Fußzeile Zchn;}
要:
{\s39\li0\fi0\ri0\sb0\sa0\ql\vertalt\fs22 ;}