以{\s开头的行中的regex replace从第一个空格到;}

以{\s开头的行中的regex replace从第一个空格到;},regex,replace,Regex,Replace,我有一些损坏的rtf文件,行如下: {\s39\li0\fi0\ri0\sb0\sa0\ql\vertalt\fs22 Fußzeile Zchn;} ^----------------------------^ 我想替换所有[^a-zA-Z0-9\{};] 但仅在以“{\s”开头并以“}”结尾的行中;从第一个“空格”到“};” 不应替换第一个“空格”和“};”。您没有指定语言

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

{\s39\li0\fi0\ri0\sb0\sa0\ql\vertalt\fs22 Fußzeile Zchn;}
                                          ^----------------------------^
我想替换所有[^a-zA-Z0-9\{};] 但仅在以“{\s”开头并以“}”结尾的行中;从第一个“空格”到“};”


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

您没有指定语言,以下是示例:


如果您可以在终端中使用
sed
,您可以这样做

sed -i 's/^\({\\s[^ ]*\s\).*\(\;}\)\(}\)\?$/\1\2/' filename
已打开包含以下内容的我的文件:

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


因此,我不确定您希望在这里使用哪种语言/技术,但如果使用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()的输入和输出相等。

您使用的是什么语言/编辑器?StackOverflow不是免费的编码服务。所以我希望你能。请更新您的问题,以显示您已在某个应用程序中尝试过的内容。有关更多信息,请参阅,并选择:)我想在搜索和替换中使用它。Regex101说:)不匹配的圆括号好的调用,坏的粘贴:)我用gnuwin sed尝试了它,它工作得很好,除了有一行以;}结尾而不是;}我应该在\;}}}\中使用第二个脚本吗或者可以在一个脚本中执行类似(\;}}或\;})的操作吗?谢谢,这项工作也可以-sed-i“s/^({\\s[^]*\s)。*(\;}\\\\\\})$/\1\2/“filename-如果您想运行两次,可以。我的设置是为了处理这两种情况,所以您只需运行一次。不过,这两种方法都应该很好。
{\s39\li0\fi0\ri0\sb0\sa0\ql\vertalt\fs22 ;}
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");