正则表达式替换为以{\ s在第一个空格之间;}之间的行开头

时间:2018-06-08 15:38:27

标签: regex replace

我有一些损坏的rtf文件,其中的行如下:

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

我想替换所有[^ a-zA-Z0-9 _ \ {}; ] 但只能在" {\ s"并以"}结束;"从第一个"空间"到"};"

第一个"空间"和"};"不应该被替换。

3 个答案:

答案 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 ;}