-4

我有一些损坏的 rtf 文件,它们的行如下:

{\s39\li0\fi0\ri0\sb0\sa0\ql\vertalt\fs22 Fußzeile Zchn;}
                                          ^----------------------------^

我想替换所有 [^a-zA-Z0-9_\{}; ] 但仅在以 "{\s" 开头并以 "};" 结尾的行中 从第一个“空格”到“};”

第一个“空格”和“};” 不应更换。

4

3 回答 3

1

您没有指定语言,这是Regex101示例:

({\\s.+?\s)(.*)(})
于 2018-06-08T15:48:38.287 回答
1

所以,我不确定你想在这里使用什么语言/技术,但如果使用 C# 是一个选项,你可以查看这个先前的问题。答案让你几乎可以到达那里。

对于您的示例:

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");

这将使您替换一个连续的坏字符,这可以解决您的示例,但不幸的是,这不是您的问题。可能有一个更优雅的解决方案,但我认为您必须迭代运行该表达式,直到 Regex.Replace() 的输入和输出相等。

于 2018-06-08T16:12:10.290 回答
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 ;}
于 2018-06-08T15:56:12.207 回答